流畅的Nhibernate和Sql Server私有setter错误

时间:2012-04-19 11:46:35

标签: sql-server-2008 fluent-nhibernate compiler-errors setter

我正在尝试用流畅的nhibernate与sql server express完成第一步,在我的项目中添加此功能。 但是有些错误。因为我是nhibernate的新手,一段时间无法解决问题。 我有一个实体

Id { get; private set; }

存取。并且此实体映射到sql server中具有标识{1,1}列的表。 但在创建Session工厂期间,我收到一个错误:

The following types may not be used as proxies:Entity: method set_Id should be 'public/protected virtual' or 'protected internal virtual'

我理解私有setter用于封装此属性的设置,但为什么我会收到此错误?  PS:关于nhibernate的流利网站的例子是使用sqllite db,一切都很好。

2 个答案:

答案 0 :(得分:20)

这个问题已经给包括我在内的许多NH / FNH用户带来了悲痛。

直到最近,NHibernate还允许私有的setter使用代理对象。但是从NH 3.2开始,不再允许私有设置者 - 它们必须是“'公共/受保护的虚拟'或'受保护的内部虚拟'”,因为错误消息说

对于许多FNH / NH示例代码而言,这是一个重大变化,对于新手来说尤其令人困惑。

答案 1 :(得分:7)

将属性声明为public virtual int Id { get; protected set; }。然后,NHibernate生成的代理对象将能够设置属性。

另一种解决方案可以是使用支持字段:

private int id;
public int Id
{
  get { return id; }
}

然后使用映射:

Map(x => x.Id).Access.CamelCaseField();