Fluent NHibernate:如何将整个类映射为只读?

Posted

技术标签:

【中文标题】Fluent NHibernate:如何将整个类映射为只读?【英文标题】:Fluent NHibernate: How to map an entire class as ReadOnly? 【发布时间】:2011-02-21 17:03:08 【问题描述】:

我有一些从非常精细的表中读取的类,这就是为什么我希望 NHibernate 将它们用作“ReadOnly”。在每个字段映射上建立 .ReadOnly() 真的很草率,我不确定我是否信任它。如何将一个类设置为完全只读的,就像我可以轻松地使用传统的 XML 映射一样?

编辑:答案确实有效。如果我尝试保存 ReadOnly() 对象,我希望它会引发异常,但它只是默默地这样做。

谢谢。

【问题讨论】:

@kaptan:我将编辑我对答案的评论。它确实有效。我只是期望它会抛出一个异常,但它只是默默地忽略任何更改。 【参考方案1】:

使用 Fluent NHibernate,就这么简单:

class EntityMap : ClassMap<Entity>

    public EntityMap()
    
        ReadOnly();

        // Mappings
    

【讨论】:

【参考方案2】:

ReadOnly() 属性实际上并不像您期望的那样工作。 使用此属性可确保您检索的对象是只读的,因此您无法更新它们。但是,它不会阻止创建新记录甚至删除数据库中的现有记录!

【讨论】:

嗯,没注意到,太疯狂了!我猜混合使用 readonly 和 protected 构造函数会起作用。 我认为“不可变”是一个更好的名字。 ReadOnly 是 Fl​​uent 命名,似乎他们认为它比最初的 NHibernate 命名更好,mutable="false"。也许在他们的上下文中,他们将ReadOnlyon 属性定义为insert="false" update="false" 的简写,但在我看来,这是对类和集合可变性的不幸命名。

以上是关于Fluent NHibernate:如何将整个类映射为只读?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 Fluent NHibernate 以将查询输出到 Trace 或 Debug 而不是 Console?

Fluent nHibernate - 如何在联结表上映射非键列?

Castle Windsor、Fluent Nhibernate 和 Automapping Isession 关闭问题

如何使用 Fluent 设置 NHibernate.Burrow?

使用 Fluent NHibernate 和 NHibernate 3 将枚举映射为 Int

Fluent NHibernate 禁用缓存