2014-02-19 59 views
0

很多映射我們在EF的情況下:許多在EF

我們有3個實體,比如說用戶,角色和部門。用戶可以在每個部門中扮演一個或多個角色,並且可以處於活動狀態或不活動狀態。因此,在映射表中的列如下:

用戶ID,角色ID,DEPTID,IsActive

目前,我們正在通過建立映射表,強制手動執行刪除操作,如果我有另一個實體管理映射刪除關係。

有沒有一種方法可以在沒有任何實體映射表的情況下實現。

在此先感謝。

回答

0

不,你不能避免交匯點實體的創建,因爲它不包含外鍵 - 你有IsActive列。即它不是pure join table(PJT):

實體框架(實體框架)創造了許多一對多在當連接表表示一個多一對多 關係只包含密鑰數據模型關係 。當實體框架創建數據模型時,它不直接在數據模型中表示PJT表。 相反,實體框架在相關表之間創建了一個直接導航關係 ,稱爲多對多關聯。

但是在你的情況下,即使刪除額外的列也無濟於事,因爲實體框架需要在每一邊都有收集加入的實體(即直接導航關係)。但是,因此您將與其他兩個實體一起加入,如果不提供額外的交匯點實體,則不能擁有此集合。

更新:您可以與WillCascadeOnDelete這種關係配置級聯刪除:

modelBuilder.Entity<User>() 
    .HasMany(u => u.RoleDepartments) 
    .WithRequired(urd => urd.User) 
    .WillCascadeOnDelete(); 

modelBuilder.Entity<Role>() 
    .HasMany(r => r.UserDepartments) 
    .WithRequired(urd => urd.Role) 
    .WillCascadeOnDelete(); 

modelBuilder.Entity<Department>() 
    .HasMany(d => d.UserRoles) 
    .WithRequired(urd => urd.Department) 
    .WillCascadeOnDelete(); 
+0

想象一下,我把這種美麗。那有可能嗎? –

+0

@bhasker_kottapally仍然不可能,請參閱更新回答 –

+0

謝謝,現在有道理。任何建議在這種情況下襬脫手動處理刪除? –