Как сопоставить защищенную коллекцию в Fluent NHibernate? - PullRequest
5 голосов
/ 15 июля 2009

Я пытался использовать свойство Reveal во Fluent, но не могу заставить его скомпилировать коллекцию. Я хочу, чтобы одна из моих коллекций в сущности была защищена и не была доступна нигде, кроме самой сущности. Это возможно? Спасибо

Edit:

Вот код, который я пытаюсь использовать,

HasMany<Trip>(x => Reveal.Property<Trip>("_trips"));

Я тоже пробовал этот код,

HasMany<Trip>(Reveal.Property<Organization>("_trips"));

Каждый раз, когда мое приложение запускается, NHibernate говорит, что не может сопоставиться с «Свойством» или выдает неизвестное исключение.

Ответы [ 2 ]

8 голосов
/ 20 октября 2009

Предполагая, что Организация имеет IList

HasMany<Trip>(Reveal.Property<Organization>("_trips"));

код должен работать. Убедитесь, что это свойство и что у вас есть защищенные геттеры и сеттеры (приват не будет работать, так как NHibernate захочет проксировать коллекцию для отложенной загрузки).

0 голосов
/ 04 апреля 2019

Самый простой ответ - разрешить сопоставление защищенных внутренних виртуальных свойств. Это документ в документации NHibernate Fluent .

  1. Перейдите в файл AssemblyInfo.cs (в разделе «Свойства») и добавьте следующее: [assembly: InternalsVisibleTo("MyDomain.mapping")] где строка - это пространство имен сопоставления.
  2. создает свойства с помощью защищенных внутренних виртуальных деклараций доступа.

        protected internal virtual IList<Clinician> __AppointmentMemberAttendees { get; set; }
    
  3. Элементы карты, как обычно.

        HasManyToMany(x => x.__AppointmentMemberAttendees)
               .Table("__AppointmentToAttendeesMember")
               .Cascade.None();
    
...