2014-12-07 3 views
0

При использовании сопоставления NHibernate по функциональности кода, как я могу сопоставить идентификатор объекта с частным полем поддержки?Как сопоставить идентификатор для частного поля поддержки в сопоставлении 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; 
    } 
} 

Mapping:

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 но не была обработана в коде пользователя Дополнительной информации: Invalid типа выражения: Ожидаемый ExpressionType.MemberAccess Найдено Constant

ответ

1

Id(x => x.Id, m => m.Access(Accessor.Field)); должны работать, потому что _id матчи LowerCaseUnderscoreStrategy. Примечание. X.Id должен быть указан как в вашем первом коде