5

ASP.NET MVC には Users、 、RolesUsersInRoles(標準の多対多結合テーブル) の 3 つのテーブルがあります。それを EF にマッピングすると、 と の 2 つのエンティティ タイプが作成されましUsersRoles。以下のようなコードを使用して、一部のユーザーを削除したいと思います。

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

UsersInRolesもちろん、テーブルのSQLレベルには接続された行があるため、できません。

その行をEFレベルから削除する方法(UsersInRolesテーブルはマップされていません)?

4

1 に答える 1

4

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 テーブル内の対応するレコードが確実に削除されます。

于 2012-04-07T18:07:47.540 に答える