Должны ли свойства в Entity быть виртуальными при использовании FluentNhibernate? - PullRequest
1 голос
/ 11 декабря 2010

Какую сущность FluentNHibernate использует в качестве сущности

Я создаю некоторую сущность в Домене (или BLL), например:

public class Role
{
    public long ID { get; protected set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public List<User> Users { get; set; }

    public Role()
    {
        Users = new List<User>();
    }
}

И я хочу использовать FlunetNHibernate для их сопоставления, но получите ошибки:

Следующие типы не могут использоваться в качестве прокси: Freeflying.Domain.Core.Profile: метод get_ID должен быть 'public / protected virtual' или 'protected внутренним виртуальным'

Да, я вспоминаю требование программиста при использовании FluentNHibernate, сущность должна выглядеть следующим образом:

public class Role
{
    public virtual long ID { get; protected set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
}

Но выглядит она как проводная.Ты так думаешь?Как вы делаете при использовании FluentNHibernate?Я не хочу возвращаться к слою домена и добавлять виртуальные для каждого свойства.

1 Ответ

4 голосов
/ 11 декабря 2010

Это базовое требование для использования NHibernate;Это позволяет NHibernate генерировать прокси-класс, который наследуется от вашего класса для отложенной загрузки и т. Д.

Я не видел способа отменить это требование, хотя, если это возможно, это будет означать, что вы не сможетеиспользуйте ленивую загрузку объектов и / или свойств.

Вот запись в блоге, которая объясняет это немного подробнее ;Он также предлагает способ избежать пометки ваших свойств как виртуальных, хотя я очень рекомендую вам не использовать этот метод (помечать классы, чтобы избежать отложенной загрузки), так как преимущества отложенной загрузки в большинстве случаев значительно превышают затраты на создание ваших свойстввиртуальная.

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