2012-01-09 97 views
0

我有一個名爲User的實體。用戶應在多語言環境中使用 所以用戶看起來像EF 4.2中的級聯刪除問題(代碼優先)

class User{ 
virtual ICollection<TextEntry> Name {get; set;} 
virtual ICollection<TextEntry> Info {get; set;} 
... 
} 

class TextEntry 
{ 
int id {get; set;} 
string Text {get; set;} 
string Culture {get;set;} 
} 

我也有用戶的規則

modelBuilder.Entity<User>() 
     .HasMany(q => q.Name) 
     .WithOptional() 
     .WillCascadeOnDelete(); 

    modelBuilder.Entity<User>() 
     .HasMany(q => q.Info) 
     .WithOptional() 
     .WillCascadeOnDelete(); 

本細則EF無法創建模型 Esception消息「引進國外KEY約束表'TextEntry'上的'User_Info'可能會導致循環或多個級聯路徑,指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。\ r \ n不能創建約束。

沒有這個規則,我在嘗試刪除用戶時收到一個異常,因爲引用約束。

如何解決這個問題而不會爲User.Info數據創建額外的實體?

回答

1

此錯誤來自SQL Server,而不是實體框架。實體框架爲兩個出現的TextEntry創建一個表。

可能最簡單的解決方案是從TextEntry派生出兩個其他類,使TextEntry抽象並將這兩個映射到不同的表(TPC)。

+0

但是如果我將有3個或更多應該是多語言的領域呢?我不認爲爲新領域創建新實例是一個好主意。因爲它們都具有相同的功能,但名稱不同。 – Ph0en1x 2012-01-09 15:46:32

+0

@ Ph0en1x是的。但是,如果不在Entity Framework之外用一些自定義部分(視圖[可能有助於模擬一個表格],觸發器[可能有助於實際上級聯]等等)創建數據庫,則不會有太多進展。 – 2012-01-09 15:49:08

+0

我真的希望這個問題有可能通過EF規則解決。 – Ph0en1x 2012-01-09 15:53:13