在少数情况下,由于实际原因,我有一个需要“支持财产”的财产。
例如,我有一个带有Name属性的类型 - 没有对访问时发生的值的转换,它只是触发某种行为;副作用,如果你愿意的话。 (并不是为了讨论而重要,但在这种特殊情况下,名称会在更改时复制到其他位置。)
让我们说:
public class Person
{
private string __name;
protected internal virtual string _name
{
get
{
return this.__name;
}
set
{
this.__name = value;
}
}
public virtual string Name
{
get
{
return _name;
}
set
{
_name = value;
// action when changing the name takes place here...
}
}
}
因此“_name”属性映射到数据库,但保持受保护/内部,因此无法直接修改它。第二个公共财产“名称”提供实际访问权限。
我设置这种方式的原因是因为如果该操作直接构建到映射的“_name”属性的set-method中,那么当一个对象从数据库中水合时会触发它,这不是我的意思想。
这一切都正常。
问题是,当您需要查询此类型时,尝试查询Person.Name将不起作用,因为该属性未映射!
我不喜欢这个,是你正在编写针对Person.Name的代码,但是必须针对Person._name编写查询,这很容易出错并且容易混淆。
有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
您可以使用 nosetter.camelcase-underscore 进行映射中的访问吗?这将直接设置字段(如果命名正确,例如_name),而不是使用属性设置器。
例如:
<property name="Name" column="Name" type="String" access="nosetter.camelcase-underscore"/>