2012-05-10 155 views
0

我們有一個使用現有遺留數據庫的ef項目,但使用ef-migrations向其添加新表。對於這些實體,我們使用新模式創建表,將它們與舊錶分開。我們在數據庫表中使用具有複數形式的類名稱的約定。 然而,當我們添加一個新的類來映射到一個遺留表(沒有複數表名)時,ef似乎忽略了映射。 實體類:實體框架代碼優先忽略表映射

public class Aktor:IVersionedEntityWithId 
{ 
    public int Id { get; set; } 
    public string Navn { get; set; } 
    public byte[] Version { get; set; } 
} 

映射代碼:

protected virtual void MapAktor(EntityTypeConfiguration<Tilsyn.Domain.Aktor> config){ 
     config.ToTable("dbo.Aktor"); 
     config.Property(v=>v.Version).IsConcurrencyToken().IsRowVersion(); 
     config.HasKey(e=>e.Id); 
    } 

例外:

System.Data.EntityCommandExecutionException:而 執行命令定義時發生錯誤。詳情請參閱內部例外。 ---> System.Data.SqlClient.SqlException:無效的對象名稱'dbo.Aktors'。

看起來好像生成的sql仍然以類名取得表名。這張照片中缺少的是什麼?我使用ToTable方法錯了嗎?

更新:當更改類名稱以外的其他名稱,它似乎工作。再次更改名稱時,問題已被廢棄。是否有EF緩存或隱藏的映射文件somwehere?

+0

BTW:'ToTable'有一個2參數重載映射表和模式名稱:'config.ToTable(「Aktor」,「dbo」)'。但它可能與你的問題無關。 – Slauma

回答

2

嘗試在您的DBContext子類中重寫OnModelCreating()方法來創建映射。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Tilsyn.Domain.Aktor>().ToTable("dbo.Aktor"); 
} 
+0

我看到這從我的片段中看不出來,但實際上我們正在做這些。 –

+0

看起來與我完全不同 – reach4thelasers

+0

是的,我知道它的確如此。我使用所有實體類中的T4生成一個映射類,並且片段中的方法從OnModelCreated調用。相信我:) –