(Свободно) Отображение NHibernate для класса с вычисленными свойствами

2

У меня есть класс, похожий на следующий (имена nb! были изменены для защиты невинных):

public class Person 
{
    public virtual int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual DateTime Birthday { get; set; }
    public virtual TimeSpan Age { get { return DateTime.Now - this.Birthday; } }
}

Я использую Fluent NHibernate для настройки моего сопоставления:

public class PersonMap : ClassMap<Person>
{
    public PersonMap() 
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.Birthday);
    }
}

Проблема заключается в том, что это исключает исключение:

Не удалось найти сеттер для свойства "Возраст" в классе "Человек"

Если Age не отмечен виртуальным, я получаю:

Следующие типы не могут использоваться как прокси: Лицо: метод get_Age должен быть "общедоступным/защищенным виртуальным" или 'protected internal virtual'

Конечно, он не может найти сеттера, и он не должен! Как я могу сделать это отображение?

Теги:
nhibernate
fluent-nhibernate

1 ответ

4
Лучший ответ

Реальный вопрос для меня - это почему бедный NHibernate пытается сопоставить свойство Age вообще? Это даже не в вашем картографировании. Я использовал только более ранние версии свободного NHibernate, до полной функциональности автоматического сопоставления, и у меня никогда не было этой проблемы.

Я подозреваю, что либо ваши соглашения приводят к тому, что он пытается сопоставить Age, либо у вас есть возможность автоматического сопоставления, которое противоречит вашему ручному сопоставлению.

Также имейте в виду, что Fluent NHibernate несколько недавно изменил соглашения. Поэтому я хотел бы посмотреть следующую документацию:

http://wiki.fluentnhibernate.org/show/Conventions

http://wiki.fluentnhibernate.org/show/ConvertingToNewStyleConventions

http://wiki.fluentnhibernate.org/show/AutoMapping

  • 1
    Это было соглашение, которое вызвало это ... спасибо.
  • 0
    Привет, Веггерби, не могли бы вы рассказать о том, какая конвенция была причиной этого? У меня точно такая же проблема.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню