C# NHibernate是否覆盖映射的设置器?
我想在NHibernate映射对象中执行此操作:C# NHibernate是否覆盖映射的设置器?,c#,nhibernate,C#,Nhibernate,我想在NHibernate映射对象中执行此操作: private ShiftTradeOffer m_Offer; public virtual ShiftTradeOffer Offer{ get { return m_Offer; } set { //... Do some stuff ... if (condition) {
private ShiftTradeOffer m_Offer;
public virtual ShiftTradeOffer Offer{
get {
return m_Offer;
}
set {
//... Do some stuff ...
if (condition)
{
m_Offer = value;
} else {
throw new Exception("whoops!");
}
}
}
(ShiftTradeOffer是映射属性)
1) 这类事情会带来问题吗
2) 创建对象时是否调用此setter
3) 就强制验证而言,这是否违反了最佳实践?我希望在这个类中嵌入特定于对象的行为。1)根据定义,属性永远不会抛出异常。您的方法违反了此最佳实践
2)调用原始setter是因为NHibernate只创建了一个代理来调用底层getter/setter。
我们使用包含序列化逻辑的属性来映射序列化数据,否则将无法工作
例如:
public virtual List<Foo> Foos {get;set;}
public virtual string SerializedFoos
{
get { return JsonConvert.Serialize(Foos); }
set { Foos = JsonConvert.Deserialize<List<Foo>>(value); }
}
公共虚拟列表Foos{get;set;}
公共虚拟字符串序列化oos
{
获取{return JsonConvert.Serialize(Foos);}
set{Foos=JsonConvert.Deserialize(value);}
}
只有SerializedFoos
属性被映射,域代码与Foos
属性一起工作。因此,NHibernate将漂亮的JSON写入数据库,而域可以使用一个方便的列表而不受性能影响,因为(反)序列化只在加载/保存对象时发生
3)需要验证的实践很多,有些人更喜欢属性,有些人更喜欢每个域对象的验证类
我会选择后一种方法,因为它最灵活,不会弄乱数据对象,并且可以轻松地验证整个对象
属性方式的一个搜索术语是“数据注释”。谷歌给出了这个结果,例如:
如果您进行数据绑定,您可以查看
IDataErrorInfo
界面。谢谢您的指导。我很高兴我问了。限制属性中可以分配的内容是否仍然有效?将有效性逻辑添加到SETER中是完全有效的,但是您应该考虑对验证技术的要求是什么。通常,您必须验证依赖于其他属性的属性值(即startdate