2012-12-04 105 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"); 
}