2012-04-07 105 views
4

在ASP.NET MVC中,我有三個表: Users,RolesUsersInRoles(標準多對多連接表)。 當我已經將其映射到EF,它創建兩個實體類型:UsersRoles。 現在我想刪除類似下面的一些用戶使用代碼:移除實體框架中多對多關係的對象映射

var aspnetUsers = _db.aspnet_Users.Single(a => a.UserId == id); 
_db.aspnet_Users.DeleteObject(aspnetUsers); 

當然我不能這樣做,因爲在表UsersInRoles SQL水平是有連接的行。

如何刪除EF水平行(UsersInRoles表不映射)?

+0

你也可以使用'級聯上delete'選項(形成流利)設置你的表像,如果這是你想要在任何時候(的行爲,雖然我個人不喜歡它,但是取決於你的模型/希望這樣)。 – NSGaga 2012-04-07 23:35:41

回答

3

您需要上下文調用SaveChanges()之前刪除從用戶對象的所有角色:

var aspnetUser = _db.aspnet_Users.Single(a => a.UserId == id); 

foreach(var role in aspnetUser.Roles.ToArray()) 
{ 
    aspnetUser.Roles.Remove(role); 
} 

_db.aspnet_Users.DeleteObject(aspnetUser); 

_db.SaveChanges(); 

這將防止因在數據庫中的引用約束的例外,並確保在UsersInRoles相應記錄表被刪除。