2014-09-10 95 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