2014-12-07 54 views
0

当通过代码功能使用NHibernate的映射时,如何将实体的Id映射到专用的支持字段?如何将Id映射到NHibernate的代码映射中的私有支持字段?

public abstract class Entity : IEntity 
{ 
    private Guid? _id; 

    protected Entity() { } 

    protected Entity(Guid? id) 
    { 
     _id = id; 
    } 

    #region IEntity Members 

    /// <summary> 
    /// Gets the unique id for this entity. 
    /// </summary> 
    /// <value>The id.</value> 
    public Guid? Id 
    { 
     get { return _id; 
    } 
} 

映射:

public abstract class GuidKeyedClassMapping<T> : ClassMapping<T> where T : class, IEntity 
{ 
    protected GuidKeyedClassMapping() 
    { 
     // What to write here??? 
     Id(x=> x.Id); 
    } 
} 

试图与指出的属性或字段与字符串,但无济于事。

Id(x => "_id", m => m.Access(Accessor.Field)); 

...给我:

类型的异常“System.Exception的”发生在NHibernate.dll但 不是在用户代码的其他信息处理:无效 表达式类型:预期ExpressionType.MemberAccess,发现恒

回答

1

Id(x => x.Id, m => m.Access(Accessor.Field));应该工作,因为_id比赛LowerCaseUnderscoreStrategy。注意x.Id必须在您的第一个代码中指定