2010-10-19 42 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