NHibernate Нестатический метод требует решения целевого сообщения об ошибке - PullRequest
3 голосов
/ 08 октября 2011

Я получаю это сообщение об ошибке ниже от 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) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...