有人可以告诉我为什么在NHibernate映射中我们可以设置access="field.camelcase"
,因为我们有access="field"
和access="property"
?
编辑:我的问题是“为什么我们能做到这一点”,而不是“它是什么意思”。我认为这可能是开发者的错误来源。
答案 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使用该字段。 Roger有一个很好的解释,为什么映射属性是一件好事。