我使用NHibernate(Fluent NHibernate),具有以下Person
和Gender
类(我不是真的,但是该示例已简化以阐明我的观点),我想将数据库列“GenderId
” [INT]值映射到 protected 我的_genderId
类中的int Person
字段。我该怎么做呢?
仅供引用,映射和域对象位于单独的程序集中。
public class Person : Entity
{
protected int _genderId;
public virtual int Id { get; private set; }
public virtual string Name { get; private set; }
public virtual Gender Gender
{
get { return Gender.FromId(_genderId); }
}
}
public class Gender : EnumerationBase<Gender>
{
public static Gender Male
= new Gender(1, "Male");
public static Gender Female
= new Gender(2, "Female");
private static readonly Gender[] _genders
= new[] { Male, Female };
private Gender(int id, string name)
{
Id = id;
Name = name;
}
public int Id { get; private set; }
public string Name { get; private set; }
public static Gender FromId(int id)
{
return _genders.Where(x => x.Id == id).SingleOrDefault();
}
}
最佳答案
只需使其成为 protected 属性(property)即可。 NH反射不需要公共(public)属性(property)。protected virtual int _genderId { get; set; }
然后像这样绘制 map (对不起,从来没有流利)。<property name="_genderId" column="genderId" />
同样,仅映射枚举可能会更容易。您可以将列存储为Enum值或文本。大量的例子。
关于nhibernate - 流利的NHibernate映射到没有暴露属性的私有(private)/ protected 字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2702417/