【问题标题】:NHibernate update causes a select of a row's computed columnsNHibernate 更新导致选择行的计算列
【发布时间】:2010-12-16 15:53:00
【问题描述】:

我有一个要更新的用户类。我的数据库中有一个 User 表,其中包含两列:FirstName 和 Lastname,还有一个名为 DisplayName 的计算列将两者连接起来,中间有一个空格。 DisplayName 的 NHibernate 映射是

<property name="DisplayName" type="string" generated="always"/>

当我更新用户对象并提交事务时,NHibernate 只在 DisplayName 属性上运行一个额外的选择语句,我假设保持对象和数据库行同步。我不需要那个,因为之后对象就会超出范围。

我可以做些什么来告诉 NHibernate 目前不需要获取更新后的 DisplayName 吗?

问候, F.

【问题讨论】:

  • 无法回答这个问题,但为什么不直接将计算作为 User 对象的一部分呢? (例如,连接 Firstname 和 Lastname 属性的 c# 属性)。这样您就不必涉及数据访问层。
  • 这是否在映射中,以便您可以选择/搜索显示名称?
  • @UpTheCreek - 我本来想说同样的话,但后来我想也许他正试图质疑它。我只将“全名”类型的东西作为类中的属性,从来没有作为映射的一部分。
  • 嗨,我一直在考虑这个问题,但是由于数据库中已经发生了计算,我想我宁愿避免这样做两次。此外,如果我想返回一个用户列表,我宁愿取消每行连接 3 个字符串的开销。
  • 为什么要在数据库中进行,如果您在代码中进行,那么您可以逐个用户更改格式。有些人喜欢姓氏,名字,而另一些人喜欢名字姓氏。将其格式化为在数据库中预先计算的属性可以提供灵活性。

标签: nhibernate nhibernate-mapping


【解决方案1】:

generated="always" 的意思是:“这是我每次修改此行时数据库生成的值;请为我刷新”。

NH 没有“仅在特定列更改时才刷新”之类的概念。

我的意见是你应该在你的领域模型而不是数据库中生成那个值。

【讨论】:

  • 当时就决定了。谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2022-01-11
  • 2022-01-24
  • 2020-07-16
  • 2019-12-17
  • 1970-01-01
相关资源
最近更新 更多