我有一个[User]
表/类和一个[Company]
表/类,它们之间有一个链接表[UserCompany]
。
在编辑用户时,除了基本信息之外,人们也可以更改该用户的访问公司,所以我在UserMap.cs中执行这样的地图:
HasManyToMany(u => u
.Companies)
.Cascade.SaveUpdate()
.Table("UserCompany")
.ParentKeyColumn("UserId")
.ChildKeyColumn("CompanyCode")
.Not.LazyLoad();
同样在CompanyMap.cs中我设置了反向:
HasManyToMany(c => c.Users)
.Inverse()
.Table("UserCompany")
.ParentKeyColumn("CompanyCode")
.ChildKeyColumn("UserId");
现在的问题是:我可以更新[User]
信息/表,以及[UserCompany]
表中的链接数据。但是,Fluent Nhibernate也会更新我根本不需要的[Company]
表。
有什么方法可以让FN不更新公司表吗?
答案 0 :(得分:2)
要停止级联更新,请删除
.Cascade.SaveUpdate()
来自您的多对多映射。
这可能有点令人困惑。与cascading
和<list>
上使用的<map>
相比较。在这种情况下,更新直接在子表上完成(父有更多孩子 ... 孩子包含 {{ 1}} - 级联在子记录上进行操作是合理的)
但是我们正在使用配对表。关系存储在那里。此表将由NHibernate(隐式级联)始终管理。
设置ParentId
转到多对多关系的另一端。在我们的案例中到公司表。它可能很方便..但你可以省略它并使所有内容按预期运行。