4

私は Entity Framework を初めて使用しますが、オンラインで見つけたいくつかの例に基づいてコードをモデル化しようとしています。希望どおりに設定したと思っていましたが、作成されたクエリは、存在しない間違ったテーブルを指しています。テーブル名が間違っているため、どこでテーブル名を取得したのか疑問に思っています。この間違ったテーブル名が指定されたプロジェクトファイルのどこにも表示されません。生成され、デバッグから取得したクエリは次のとおりです。

{SELECT 
[Extent1].[AssetTag] AS [AssetTag], 
[Extent1].[Location] AS [Location], 
[Extent1].[PoolType] AS [PoolType], 
[Extent1].[InventoryStatus] AS [InventoryStatus], 
[Extent1].[InventoryType] AS [InventoryType], 
[Extent1].[Comments] AS [Comments]
FROM [dbo].[ComputerInventories] AS [Extent1]}

ComputerInventories は ComputerInventory である必要があります。

ここに私のデータモデルがあります

public class ComputerInventory
    {
        [Key]
        public String AssetTag {get; set;}
        public String Location { get; set; }
        public String PoolType { get; set; }
        //public String ReasonInProgram { get; set; }
        public String InventoryStatus { get; set; }
        public String InventoryType { get; set; }
        [StringLength(500)]
        public String Comments { get; set; }
        //public String Clock { get; set; }
    }

    public class AssetDBContext : DbContext
    {
        public DbSet<ComputerInventory> ComputerInventory { get; set; }

        public AssetDBContext()
            : base("Name=<name>")
        {
        }
    }

ここで、クエリからリストを取得しようとしています

public ViewResult Index()
        {
            return View(db.ComputerInventory.ToList());
        }

テーブル名の ComputerInventories 値をどこで取得しているかについて、私は完全に迷っています。

4

2 に答える 2

4

Entity Framework は、多くのことに命名規則を使用します。そのうちの 1 つは、テーブル名がエンティティ名の複数形を取って作成されることです。次のようにその規則を削除できます。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}

MSDN の PluralizalingTableNameConvention を参照してください。

規約の詳細については

http://entityframework.codeplex.com/wikipage?title=Custom%20Conventions

于 2012-12-04T16:02:53.707 に答える
3

これはすでに回答されていますが、この質問に将来の訪問者のために代替案を追加したいと思います...

規則を削除するのではなく、同じメソッドをオーバーライドしてテーブルの名前を指定するだけです。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     modelBuilder.Entity<Object>().ToTable("TableName");
}
于 2012-12-31T09:37:47.903 に答える