很多映射我們在EF的情況下:許多在EF
我們有3個實體,比如說用戶,角色和部門。用戶可以在每個部門中扮演一個或多個角色,並且可以處於活動狀態或不活動狀態。因此,在映射表中的列如下:
用戶ID,角色ID,DEPTID,IsActive
目前,我們正在通過建立映射表,強制手動執行刪除操作,如果我有另一個實體管理映射刪除關係。
有沒有一種方法可以在沒有任何實體映射表的情況下實現。
在此先感謝。
很多映射我們在EF的情況下:許多在EF
我們有3個實體,比如說用戶,角色和部門。用戶可以在每個部門中扮演一個或多個角色,並且可以處於活動狀態或不活動狀態。因此,在映射表中的列如下:
用戶ID,角色ID,DEPTID,IsActive
目前,我們正在通過建立映射表,強制手動執行刪除操作,如果我有另一個實體管理映射刪除關係。
有沒有一種方法可以在沒有任何實體映射表的情況下實現。
在此先感謝。
不,你不能避免交匯點實體的創建,因爲它不包含外鍵 - 你有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();
想象一下,我把這種美麗。那有可能嗎? –
@bhasker_kottapally仍然不可能,請參閱更新回答 –
謝謝,現在有道理。任何建議在這種情況下襬脫手動處理刪除? –