メンバーシップ システムに NHibernate を使用しています。は多くののUser
メンバーになることができ、多くのユーザーを持つことができます。Role
Role
aRole
または aUser
が削除された場合、関連付けレコード (「RoleUsers」テーブル) の削除のみをカスケードする必要があります。
Role
期待どおりに作品を削除します。ただし、 を削除しUser
ても関連付けレコードは削除されないため、外部キー制約により失敗します。
側の私のマッピングRole
:
HasManyToMany(r => r.Users)
.Access.CamelCaseField()
.Table("RoleUsers")
.ParentKeyColumn("RoleId")
.ChildKeyColumn("UserId")
.AsSet();
側面のマッピングUser
:
HasManyToMany(u => u.Roles)
.Access.CamelCaseField()
.Table("RoleUsers")
.ParentKeyColumn("UserId")
.ChildKeyColumn("RoleId")
.Inverse(); // we'll add user to role, not role to user
そして失敗したテスト:
[Test]
public void Deleting_user_should_not_delete_roles()
{
var user = new User("john@doe.com", "John", "Doe", "Secr3t");
var role = new Role("Admin");
role.AddUser(user);
object id;
using (var txn = Session.BeginTransaction())
{
id = Session.Save(user);
Session.Save(role);
txn.Commit();
}
Session.Clear();
var fromDb = Session.Get<User>(id);
using (var txn = Session.BeginTransaction())
{
Session.Delete(fromDb);
txn.Commit();
}
Session.Query<Role>().Count().ShouldEqual(1);
}
ユーザーマッピングのすべての組み合わせを試しましCascade
たが、失敗するか、関連レコードとロールを削除します(私が望むものではありません)。