【问题标题】:Fluent Nhibernate --- How to make it NOT update the other tableFluent Nhibernate --- 如何使它不更新另一个表
【发布时间】:2013-05-24 02:46:54
【问题描述】:

我有一个[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 不更新公司表?

【问题讨论】:

    标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping


    【解决方案1】:

    要停止级联更新,只需删除

    .Cascade.SaveUpdate()
    

    来自您的多对多映射。

    这可能有点令人困惑。与<list>s 和<map>s 上使用的cascading 相比。在这种情况下,更新直接在子表上完成(parent 有更多 children...child 包含 @987654326 @ - 级联对child记录进行操作是合理的)

    但在这里我们使用的是一对表。关系存储在那里。此表将始终由 NHibernate(隐式级联)管理。

    设置.Cascade.SaveUpdate() 转到多对多关系的另一端。在我们的例子中到公司表。它可能很方便.. 但您可以省略它并让一切按预期运行。

    【讨论】:

    • 您好 Radim,非常感谢您的解释。 Fluent NHibernate 的“隐式级联”听起来非常强大! :)
    • 嗨 Radim,如果我只想在 [Conmpany] 表上“添加/保存”,但没有“更新”,怎么样?
    • 我很难想象它会真正满足您的需求。想象一下,您指望在创建用户期间添加(持久)公司这一事实。然后你只需更新用户......追加新公司(不持久)......公司不会被持久......而引用会(实际上它失败)。所以这种情况很可能是不可能的,我会说......但也许你会找到一些;)
    • 好的,假设 SaveUpdate() 必须保持在一起,那么是否可以跳过某些列? (我仍然想“阅读”它们,只是在保存/更新时,不要插入那些列的值......)抱歉再次问你......
    • 请尝试看一下5.1.3。类-nhforge.org/doc/nh/en/index.html#mapping-declaration-class。要点 7. 有答案,如何仅为脏/更改的列更新实体/类...这可能会有所帮助;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多