NHibernate:为什么field.camelcase?

时间:2012-07-06 08:36:10

标签: nhibernate nhibernate-mapping camelcasing

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

编辑:我的问题是“为什么我们能做到这一点”,而不是“它是什么意思”。我认为这可能是开发者的错误来源。

3 个答案:

答案 0 :(得分:5)

我猜你想知道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”。原则是一样的,我想你明白了这一点;)

答案 1 :(得分:3)

'。'之后的部分是所谓的命名策略,您应该指定何时在hbm中写入的名称与支持字段不同。在field.camelcase的情况下,您可以在hbm中编写CustomerName,NHibernate会在类中查找名为customerName的字段。原因是NHibernate没有强制你选择一个符合的名称约定,NH几乎可以使用任何命名约定。

答案 2 :(得分:0)

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

他们可能

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

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