アプリケーションを実行すると、上記の例外が発生します。アプリケーションはasp.net mvc 3/C#を使用しています。 mdfファイルを作成し、それをVisual Web Developer ExpressのApp_Dataフォルダーに追加しました。接続文字列をweb.configフォルダーに追加しましたが、実行して/ storeを参照すると、上記のエラーが表示され、var categories = storeDB.Categories.ToList();
行が強調表示されます。私のデータベースには6つのテーブルがあり、そのうちの1つはカテゴリです。
コントローラ:
EventCalendarEntities storeDB = new EventCalendarEntities();
public ActionResult Index()
{
var categories = storeDB.Category.ToList();
return View(categories);
}
Web.configファイルの接続文字列:
<connectionStrings>
<add name="EventCalendarEntities"
connectionString="data source=.\SQLEXPRESS;
Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|\MvcEventCalendar.mdf;
User Instance=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
これは通常、単純な構成の問題を意味します。
dbo
スキームはありません(Fred.Categories
にある可能性があります)dbo.CATEGORIES
ですこれらのいずれかにより、上記の例外が発生します。特に、次のように述べています。
私のデータベースには6つのテーブルがあり、そのうちの1つはカテゴリです。
次にmachine、Category
!= Categories
モデルビルダークラスを使用してみてください。これは、テーブルとモデルクラス間のマッピングを構成または明示的に定義する方法です。
あなたのエンティティ/コンテキストクラスでこのコードを追加してみてください
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Category>().ToTable("Category");
}
そのメソッド。すべての包含ステートメントを使用してください。
これは、2018年4月の例外で依然としてトップの検索ヒットであり、解決策に導いたので、特定の状況でこれを付け加えましょう...
私たちのアプリケーションはABPとABP.Zeroに基づいており、すでに Marcの答え に適合するパターンがあります。 OnModelCreatingメソッドの明示的なマッピング(la Dhananjayの答え )は完全に機能したと思いますが、ABPのマッピングはこの時点まで完全に機能しており、パターンを壊したくなかったようです。
私の解決策は、エンティティクラスにテーブル属性を追加することでしたが、これによりEFの混乱が解消されました。
using System;
using Abp.Domain.Entities;
using System.ComponentModel.DataAnnotations.Schema;
namespace Discovery.History
{
[Table("HistoryRecords")]
public class HistoryRecord : Entity<int>
{
public int ResearcherCount { get; set; }
public DateTime DateSubmitted { get; set; }
public string Comments { get; set; }
}
}
これを修正するために本当にやりたいことはあなたの中にありますContext class
OnModelCreating
というメソッドが必要です...これが次のことを確認してください:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
名前カテゴリのあるテーブル、またはテーブルという名前のSQLキーワードで実証済み、テスト済み、検証済みで、ToTableを使用して特定のテーブル名を指示します
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<category>().ToTable("category");
}