Я получаю это сообщение об ошибке ниже от NHibernate. Я искал и не нашел четкого решения этой ошибки. Я наткнулся на решение и решил поделиться. Моя проблема оказалась в том, что мне нужно было определить конструктор по умолчанию для класса (тот, который не принимает параметров):
public class Staff : Entity, IStaff
{
public virtual int StaffId { get; set; }
protected virtual internal Case Case { get; set; }
protected virtual internal Person Person { get; set; }
protected Staff() {} // Define this constructor for NHibernate
public Staff(Person person)
{
Person = person;
}
}
Оглядываясь назад, моя проблема началась, когда я добавил конструктор в класс, который принял параметр Person. C # определяет конструктор по умолчанию, но только когда вы не определяете конструкторы. Как только вы определите конструктор, вы должны явно определить конструктор по умолчанию:
Если класс не не имеет конструктора, конструктор по умолчанию генерируется автоматически, а значения по умолчанию используются для инициализации полей объекта.
http://msdn.microsoft.com/en-us/library/k6sa6h87.aspx
Я обнаружил это, потому что у меня был похожий класс, который работал, и я определил конструктор по умолчанию для этого, потому что мне нужен был класс без параметров в моем коде.
Ошибка трассировки стека:
System.Reflection.TargetException occurred
Message=**Non-static method requires a target**...
Source=mscorlib
NHibernate.PropertyAccessException occurred
Message=**could not set a property value by reflection setter** of
*YourClassPropertyNameHere* ...
Source=NHibernate
StackTrace:
at NHibernate.Properties.BasicPropertyAccessor.BasicSetter.Set(Object target, Object value)