谁能告诉我为什么在 NHibernate 映射中我们可以设置access="field.camelcase"
,因为我们有access="field"
and access="property"
?
编辑:我的问题是“为什么我们可以这样做”,而不是“这是什么意思”。我认为这可能是开发人员的错误来源。
谁能告诉我为什么在 NHibernate 映射中我们可以设置access="field.camelcase"
,因为我们有access="field"
and access="property"
?
编辑:我的问题是“为什么我们可以这样做”,而不是“这是什么意思”。我认为这可能是开发人员的错误来源。
我猜你想知道当我们可以对 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”。原理是一样的,我想你明白了;)
'.' 之后的部分 就是所谓的命名策略,当你写在 hbm 中的名称与支持字段不同时,你应该指定它。如果field.camelcase
你被允许写CustomerName
在 hbm 中,NHibernate 会在类中寻找一个有名字的字段customerName
。这样做的原因是 NHibernate 不会强迫您选择符合标准的命名约定,NH 将适用于几乎任何命名约定。
在某些情况下,属性不适合 NH 设置值。
他们可能会
然后你不希望 NH 调用属性设置器。您仍然映射属性,而不是映射字段,但告诉 NH 在读取/写入值时使用该字段。Roger很好地解释了为什么映射属性是一件好事。