Не удалось найти средство получения для компонента-члена

#c# #nhibernate #fluent-nhibernate #linq-to-nhibernate

#c# #nhibernate #свободно-nhibernate #linq-to-nhibernate

Вопрос:

Мы используем Fluent Nhibernate, и я, похоже, не могу сопоставить компонент. Мой класс компонента не является сущностью и имеет два значения:

  public class Member
 {
    public int ID;
    public string Name;
 }
  

Родительский объект сопоставляется с представлением с двумя столбцами для заполнения двух свойств. Я сопоставляю класс как компонент, используя Linq как:

 Component(x => x.CurrentMember, m =>
{
    m.Map(x => x.ID, "MemberId");
    m.Map(x => x.Name, "MemberName");
});
  

Когда я запускаю это, я получаю исключение FluentNHibernateConfigurationException, создающее SessionFactory: «Не удалось найти средство получения для свойства ‘ID’ в классе ‘Member». Это не сущность, поэтому я немного смущен тем, чего мне не хватает?

Ответ №1:

Ну, ваш класс не указывает вызываемое свойство ID — он указывает поле. Возможно, вам следует попробовать указать свойства вашего класса, а не общедоступные поля:

 public class Member
{
   public int ID { get; set; }
   public string Name { get; set; }
}
  

Комментарии:

1. Как упоминает @andronz ниже, они должны быть виртуальными свойствами.

2. @ColeW: Определенно виртуальный? Даже если это не сущность? Отредактирую, чтобы упомянуть об этом, но я бы попробовал без первого 🙂

3. Это сделало это, я не понимал, что свойства компонента также должны быть виртуальными. Спасибо!

4. @Джон, на самом деле ты прав. Виртуальный не нужен в компоненте. Только в самой сущности.

5. @Джон, я протестировал оба способа, и это определенно работает без того, чтобы свойства были виртуальными в компоненте.

Ответ №2:

возможно, попробуйте использовать свойство, которое должно быть виртуальным