实体框架6.1.1代码首先创建不可读的表

时间:2014-09-10 15:28:33

标签: c# sql entity-framework

我对此代码有些疑问:

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:不允许对系统目录进行临时更新。

但数据库确实已创建(发布不允许发布的图片)

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

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

![查询表数据时例外]

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

- 经过几个小时,我意识到这是因为桌子的名字。

如果更改表名 - 完全可以正常工作。

我的问题是:为什么我的表名SysType会抛出异常? Аnd是否有其他表格的名称导致类似的问题?

我很高兴听到我的问题的答案

更新:模型第一种方法 - 相同的结果

2 个答案:

答案 0 :(得分:2)

因为您拥有的实体将被创建为dbo.SysTypes,因为它是数据库中也是dbo.SysTypes的现有系统表。

您的实体将生成为dbo.SysTypes,因为生成表格时dbo是默认架构名称,而SysTypeSysTypes复数为[TableAttribute("Application_SysTypes")] modelBuilder.Entity<SysType>().ToTable("Application_SysTypes")` }。

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

{{1}}

或使用流利的api:

{{1}}

答案 1 :(得分:0)