2012-12-04 65 views
4

我是新來的實體框架,但我嘗試一些例子我在網上找到後,我的代碼模型。我原本以爲它設置了我想要的方式,但所創建的指向錯誤的,不存在的表的查詢。我想知道在那裏得到了表名,因爲它是錯誤的,我沒有看到任何被指定這個錯誤的表名的項目文件的任何地方。以下是我在調試過程中生成的查詢:不知道的DbContext如何創建SQL查詢錯誤的表

{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

實體框架使用的命名慣例很多事情。其中之一是,表名是取實體名稱的複數創建。您可以刪除這樣的約定:

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

請參閱PluralizalingTableNameConvention on MSDN

有關公約

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

+0

這工作,謝謝。並感謝您提供更多信息 – DFord

3

雖然這更多信息已經被回答,我只是想添加一個替代的對這個問題的任何未來的訪客......

而不是刪除約定,只需通過覆蓋相同的方法來指定表名。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Object>().ToTable("TableName"); 
}