【发布时间】:2012-12-06 20:47:51
【问题描述】:
我们将 NHibernate 用于我们的会员系统。 User 可以是多个 Roles 的成员,Role 可以拥有多个用户。
当Role 或User 被删除时,它应该只级联删除关联记录(“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 的所有组合,但它要么失败要么删除关联记录和角色(不是我想要的)。
【问题讨论】:
标签: nhibernate fluent-nhibernate