我使用NHibernate(Fluent NHibernate),具有以下PersonGender类(我不是真的,但是该示例已简化以阐明我的观点),我想将数据库列“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/

10-10 05:59