#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:
возможно, попробуйте использовать свойство, которое должно быть виртуальным