2010-10-19 43 views
4

是否可以设置NHibernate加载/持久化类的非公共属性?例如,我可能有一个Item类如下。NHibernate可以设置非公共属性吗?

public class Item 
{ 
    public int ItemID {get; set;} 
    public string Name{get; set;} 
} 

用下面的映射:

<class name="RCL.Item" table="Items"> 
    <id name="ItemID" type="Int32" column="ItemID"> 
     <generator class="native"/> 
    </id> 
    <property name="Author" /> 
</class> 

但是我真的不希望我的项目类的消费者能够改变的项目ID字段。我可以限制对ItemID的设置访问者的访问吗?如果是的话,我应该怎么做?私人,受保护,内部,受保护的内部?

回答

10

从NHibernate的教程:

属性不需要要声明为public - NHibernate的可以坚持一个属性与内部,保护的,保护的 内部或专用的知名度。

只需设置项目ID私人

+2

赫姆,确定这是愚蠢的容易。但NHibernate如何看到我的私人访问器? – 2010-10-20 00:01:28

+2

使用反射 – gcores 2010-10-20 00:04:56

+0

当财产属于内部时,我收到此错误。以下类型不能用作代理: Item:method get_ItemID应该是'public/protected virtual'或'protected internal virtual' – 2013-02-08 09:10:17