(Свободно) Отображение NHibernate для класса с вычисленными свойствами - PullRequest
2 голосов
/ 04 августа 2009

У меня есть класс, подобный следующему (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);
    }
}

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

Не удалось найти установщик для свойства «Возраст» в классе «Персона»

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

Следующие типы нельзя использовать как прокси: Person: метод get_Age должен быть «публичным / защищенным виртуальным» или «защищенный внутренний виртуальный»

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

1 Ответ

4 голосов
/ 04 августа 2009

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...