2014-09-10 93 views
1

我有一些问题,此代码:实体框架6.1.1代码首先创建不可读表

class Program 
{ 
     static void Main(string[] args) 
     { 
     Database.SetInitializer(new DropCreateDatabaseAlways<MyContext>()); 

     using (var context = new MyContext()) { 
      var newType = new SysType { Name = "New Name" }; 
      context.SysTypes.Add(newType); 
      context.SaveChanges();    
     } 

     using (var context = new MyContext()) { 
      Console.WriteLine(context.SysTypes.FirstOrDefault()); 
     } 

     Console.ReadLine(); 
     } 
    } 

    public class SysType 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public class MyContext : DbContext 
    { 
     public MyContext() : base("name=MyDb") { }  
     public DbSet<SysType> SysTypes { get; set; }  
    } 

在执行过程中发生异常的程序:

System.Data.Entity.Infrastructure。 DbUpdateException”

System.Data.SqlClient.SqlExeption:特设更新系统目录不允许

。 0

但是数据库并获得创建(后不允许我像)

![SQL Server的对象资源管理器视图]

如果尝试查询表的数据,则抛出异常

![查询表数据异常]

如果我使用SQL脚本手动创建表,则表查询成功。

很多小时后,我意识到这是因为桌子的名字。

如果更改表名 - 所有工作都很完美。

我的问题是:为什么我的表名SysType抛出异常? аnd是否还有其他引起类似问题的表名?

我会很高兴听到回答我的问题

更新:型号第一种办法 - 同样的结果

回答

2

因为你有实体会dbo.SysTypes地方,因为它是现有的系统表中创建在数据库中也是dbo.SysTypes

你的实体将作为dbo.SysTypes生成因为dbo是默认模式名称生成一个表时和SysTypePluralizingTableNameConvention被使用复数为SysTypes

的解决方案是使用属性来配置手动生成的表名,您可以:

[TableAttribute("Application_SysTypes")] 

或使用流利的API:

modelBuilder.Entity<SysType>().ToTable("Application_SysTypes")` 
+0

谢谢。我没有注意到名字的复数化 – Ssh 2014-09-10 15:47:14