4

谁能告诉我为什么在 NHibernate 映射中我们可以设置access="field.camelcase",因为我们有access="field"and access="property"

编辑:我的问题是“为什么我们可以这样做”,而不是“这是什么意思”。我认为这可能是开发人员的错误来源。

4

3 回答 3

5

我猜你想知道当我们可以对 field 做同样的事情时 field.camelcase 有什么用?这是真的,但是当例如编写查询或从其他映射中引用属性时,这会给 (NH) 属性提供不直观的名称。

假设您有想要使用该字段映射的内容,例如

private string _name;
public string Name { get { return _name; } }

您当然可以使用“字段”映射字段,但是在编写 HQL 查询时,您必须编写“_name”。

select a from Foo a where a._name = ...

如果您改为使用 field.camelcase 数据,则相同的查询看起来像

select a from Foo a where a.Name...

编辑 我现在看到你写了“field.camelcase”,但我的回答是关于“field.camelcase-underscore”。原理是一样的,我想你明白了;)

于 2012-07-06T08:46:53.407 回答
3

'.' 之后的部分 就是所谓的命名策略,当你写在 hbm 中的名称与支持字段不同时,你应该指定它。如果field.camelcase你被允许写CustomerName在 hbm 中,NHibernate 会在类中寻找一个有名字的字段customerName。这样做的原因是 NHibernate 不会强迫您选择符合标准的命名约定,NH 将适用于几乎任何命名约定。

于 2012-07-06T08:40:18.300 回答
0

在某些情况下,属性不适合 NH 设置值。

他们可能会

  • 根本没有二传手
  • 对设置的数据调用验证,从数据库加载时不使用
  • 做一些仅在业务逻辑更改值时才使用的其他东西(例如,设置其他属性)
  • 以某种方式转换值,这会导致 NH 执行不必要的更新。

然后你不希望 NH 调用属性设置器。您仍然映射属性,而不是映射字段,但告诉 NH 在读取/写入值时使用该字段。Roger很好地解释了为什么映射属性是一件好事。

于 2012-07-06T08:54:16.490 回答