使用Fluent NHibernate从Identity类映射Id

时间:2012-08-16 08:42:13

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在尝试使用Fluent NHibernate从Identity类映射Id。

身份等级:

public interface IValueObject<T> {
    bool SameValueAs(T other);
}

[Serializable]
public class Identity<TEntity> : IValueObject<Identity<TEntity>> {

    public long Id { get; protected set; }

    public Identity(long id) {
        this.Id = id;
    }

    protected Identity() { }

    public bool SameValueAs(Identity<TEntity> other) {
        return other != null && this.Id == other.Id;
    }
}

型号:

public interface IEntity<T> {
    Identity<T> Identity { get; }
    bool SameIdentityAs(T other);
}

public class Employee: IEntity<Employee> {
    public virtual Identity<Employee> Identity { get; set; }
    public virtual string Name { get; set; }
}

如何映射此员工?这种方式不起作用,我在构建SessionFactory时遇到以下异常: 无法在“员工”课程中找到属性“Id”的获取者

public class EmployeeMap : ClassMap<Employee> {

    public EmployeeMap() {
        Id(x => x.Identity.Id).GeneratedBy.Native();
        Map(x => x.Name);
    }
}

1 个答案:

答案 0 :(得分:0)

不支持您尝试做的事情。

有一个更长的解释,但是,特别是在使用DB生成的id时,你应该使用一个unwrapped,native int或long。

也就是说,可以将id映射为您实体中的私有字段,并使用您的包装器公开它。这仍然不适用于LINQ查询,因此它的价值有限。