我正在尝试通过将实体的属性标记为虚拟来支持我的实体的 NHibernate 代理:
public class Video : IAbstractDomainEntity<string>
{
public virtual string Id { get; set; }
public virtual string Title { get; set; }
public virtual int Duration { get; set; }
public virtual string Author { get; set; }
public virtual bool HighDefinition { get; set; }
public Video()
{
Id = string.Empty;
Title = string.Empty;
Author = string.Empty;
}
}
ReSharper 指出,由于此处描述的问题,这是不好的做法:构造函数中的虚拟成员调用
我理解这个问题,我也明白我不能将我的类标记为密封,因为这样 NHibernate 将无法从实体生成代理。
我只是忍受衰落,并确保不对我的二传手做任何奇怪的事情吗?
最佳做法是将属性与支持字段一起使用:
public class Video : IAbstractDomainEntity<string>
{
private string _id;
private string _title;
private string _author;
public virtual string Id
{
get { return _id; }
set { _id = value; }
}
public virtual string Title
{
get { return _title; }
set { _title = value; }
}
public virtual string Author
{
get { return _author; }
set { _author = value; }
}
public virtual int Duration { get; set; }
public virtual bool HighDefinition { get; set; }
public Video()
{
_id = string.Empty;
_title = string.Empty;
_author = string.Empty;
}
}
因此,您可以避免子类出现问题,并且不再看到任何警告
我更喜欢更简洁、封装的变体:
public class Video : IAbstractDomainEntity<string>
{
public virtual string Id { get; protected set; }
public virtual string Title { get; protected set; }
public virtual string Author { get; protected set; }
public virtual int Duration { get; protected set; }
public virtual bool HighDefinition { get; protected set; }
public static Video Create()
{
return new Video
{
Id = string.Empty,
Title = string.Empty,
Author = string.Empty
}
}
}