メンバーシップ システムに NHibernate を使用しています。は多くののUserメンバーになることができ、多くのユーザーを持つことができます。RoleRole
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たが、失敗するか、関連レコードとロールを削除します(私が望むものではありません)。