Вспомогательные свойства NHibernate в сущности - PullRequest
3 голосов
/ 10 февраля 2011

У меня есть сущность NHibernate, которая выглядит следующим образом:

public class Offender
{
    public virtual string FName { get; set; }
    public virtual string MName { get; set; }
    public virtual string LName { get; set; }

    public string FullName
    {
        get
        {
            return FName + " " + MName + " " + LName;
        }
    }
}

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

The following types may not be used as proxies:
mPSOR.Data.Entities.SORPerson: method get_FullName should be 'public/protected virtual' or 'protected internal virtual'

Есть ли способ включить вспомогательное свойство, подобное этому? Или я должен поставить такие вычисления при компиляции DTO или по моему мнению?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2011

NHibernate нуждается в всех свойствах, чтобы быть виртуальными ... даже "поддельные" свойства, такие как ваше "FullName".

Просто сделайте его виртуальным, и он будет работать:

public virtual string FullName
{
}
3 голосов
/ 11 февраля 2011

В любом случае, сделайте метод виртуальным.NHibernate жалуется, потому что часть его функций заключается в создании прокси, которые он использует для обеспечения отложенной загрузки.Если он не может создать прокси-сервер с такими же функциями, но с переопределениями, которые инициализируют реальный объект, он не сможет работать прозрачно.

1 голос
/ 11 февраля 2011

Вы также можете использовать формулу в ваших беглых отображениях:

Map(x => x.LName).Formula("FName + ' ' + MName + ' ' + LName");

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