在少数情况下,出于实际原因,我有一个需要“支持属性”的属性。
例如,我有一个具有 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”属性的设置方法中,它将在从数据库中水合对象时触发,这不是我想要的。
这一切都很好。
问题是,当您需要查询此类型时,尝试查询 Person.Name 将不起作用,因为该属性未映射!
我不喜欢这一点的事实是,您正在编写针对 Person.Name 的代码,但必须针对 Person._name 编写查询,这容易出错且令人困惑。
有没有更好的方法来解决这个问题?