Как сказать Fluent NHibernate не отображать свойство класса

У меня есть класс, который отображается в свободном nhibernate, но я хочу, чтобы одно из свойств классов игнорировалось отображением.

С классом и отображением ниже я получаю эту ошибку:

Следующие типы не могут использоваться в качестве прокси: iMasterengine.Data.Model.Calendar: метод get_HasEvents должен быть виртуальным

//my class
public class Calendar : IEntity {
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual string SiteId { get; set; }
    public virtual IList<CalendarEvent> Events { get; set; }
    //ignore this property
    public bool HasEvents { get { return Events.Count > 0; } }
}

//my mapping
public class CalendarMap : ClassMap<Calendar> {
    public CalendarMap() {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.SiteId);
        HasMany(x => x.Events).Inverse();
        //what do I put here to tell nhibernate
        //to ignore my HasEvents property?
    }
}

person modernzombie    schedule 25.05.2009    source источник


Ответы (2)


Вы можете просто сделать HasEvents виртуальным в классе:

public virtual bool HasEvents { get { return Events.Count > 0; } }

К сопоставлениям ничего добавлять не нужно.

Вам нужно только сообщить fluent, что нужно использовать свойство, если вы используете Auto Mapping, чего я не думаю.

person UpTheCreek    schedule 07.05.2010
comment
У меня не работает Linq на старой версии NHibernat.e - person alphadogg; 07.01.2013

person    schedule
comment
Где должна быть размещена эта линия? Я подумал, что он войдет в конструктор CalendarMap, но я не вижу доступного экземпляра карты. - person ddc0660; 19.10.2009
comment
Его следует добавить там, где вы создаете конфигурацию. См. Эту ссылку http://wiki.fluentnhibernate.org/Auto_mapping#Ignoring_properties - person Rajeesh; 16.02.2011
comment
IgnoreProperty () предназначен только для автоматического сопоставления, если вы сами указываете свои сопоставления (т.е. используете карту классов), тогда это не имеет значения. Плакат включает карту классов и ничего не говорит об автоматическом сопоставлении, поэтому я не понимаю, какое это имеет значение. - person UpTheCreek; 01.06.2011
comment
Я наткнулся на это в Google, и я делаю это автоматически, поэтому, даже если он не может ответить на вопрос, он ответил на мой - person harriyott; 23.08.2012
comment
смогу ли я изменить базовые средства для каждого пользователя, я хочу сделать его доступным для группы пользователей и скрыть для некоторой группы пользователей. - person user1220402; 17.04.2015
comment
Куда мне это добавить? - person rabejens; 30.01.2018