我有以下實體:項目,ProjectMapping和用戶,這是許多人manyHere是映射:NHibernate的許多一對多,無法刪除行
public ProjectMembershipMapping()
{
Property(pm => pm.IsAccepted, prop => prop.NotNullable(true));
Property(pm => pm.Permission, prop => prop.NotNullable(true));
ManyToOne(pm => pm.Member, mapping =>
{
mapping.Lazy(LazyRelation.NoLazy);
mapping.Cascade(Cascade.All);
});
ManyToOne(pm => pm.Project, mapping =>
{
mapping.Lazy(LazyRelation.NoLazy);
mapping.Cascade(Cascade.All);
});
ComposedId(pm =>
{
pm.ManyToOne(prop => prop.Member);
pm.ManyToOne(prop => prop.Project);
});
}
public ProjectMapping()
{
Set(proj => proj.Members,
mapping =>
{
mapping.Lazy(CollectionLazy.NoLazy);
mapping.Inverse(false);
mapping.Cascade(Cascade.All);
mapping.Table("ProjectMembership");
mapping.Key(k => k.Column("Project"));
},
action => action.OneToMany()
);
}
public class DevcoopUserMapping : ClassMapping<DevcoopUser>
{
Bag(user => user.ProjectMemberships,
mapping =>
{
mapping.Lazy(CollectionLazy.NoLazy);
mapping.Inverse(false);
mapping.Cascade(Cascade.All);
mapping.Table("ProjectMembership");
mapping.Key(k => k.Column("Member"));
},
action => action.OneToMany());
}
用戶可以有很多的成員項目。現在讓我們說我會退訂他的項目。通過的Isession對象只需刪除ProjectMembership對象拋出我:
deleted object would be re-saved by cascade (remove deleted object from associations)[devcoop.Daos.ProjectMembership#devcoop.Daos.ProjectMembership]
在另一方面,當我第一次嘗試從項目和用戶刪除此ProjectMembership實例(我從協會刪除它建議給我),我得到例外:
could not delete collection: [devcoop.Daos.Project.Members#1][SQL: UPDATE ProjectMembership SET Project = null WHERE Project = @p0]
任何人都可以幫忙嗎?據說我搞砸了映射周圍的東西,但我不知道這是什麼。
我只設法通過在3個事務中使用hql查詢來刪除項目工作,這是一個混亂的解決方法,而不是一個解決方案。有沒有關於NHibernate的多對多的任何「最佳實踐」,因爲我明確地解決了這些映射的問題,但我找不到什麼 – soliloquyy