NHibernate 可以设置非公共属性吗?

Posted

技术标签:

【中文标题】NHibernate 可以设置非公共属性吗?【英文标题】:Can NHibernate set non-public properties? 【发布时间】:2011-04-27 18:54:16 【问题描述】:

是否可以设置 NHibernate 来加载/保留类的非公共属性?例如,我可能有一个 Item 类,如下所示。

public class Item

    public int ItemID get; set;
    public string Nameget; set;

使用以下映射:

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

但是我真的不希望我的 Item 类的消费者能够更改 ItemID 字段。我可以限制对 ItemID 的 set 访问器的访问吗?如果是这样,我应该将其设置为什么?私有的、受保护的、内部的、受保护的内部?

【问题讨论】:

【参考方案1】:

来自 NHibernate 教程:

属性无需声明为公开 - NHibernate 可以持久化具有内部、受保护、受保护的属性 内部或私人可见性。

只需将 ItemID 设置为私有

【讨论】:

嗯,好吧,这很愚蠢。但是 NHibernate 怎么能看到我的私有访问器呢? 当属性为内部时,我收到此错误。以下类型不得用作代理:项目:方法 get_ItemID 应为“公共/受保护的虚拟”或“受保护的内部虚拟”

以上是关于NHibernate 可以设置非公共属性吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用流利的 nhibernate 设置 generate_statistics = true

插入时 NHibernate 组件非空属性

通过代码进行 Nhibernate 一对一映射

使用 NHibernate 从头开始​​:新的大型应用程序的提示

nhibernate 可以在没有代理的情况下进行延迟加载吗?

NHibernate 和共享网络托管