我从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)