2010-05-20 33 views
17

我有一个从非常细腻表中读取,这就是为什么我希望他们通过NHibernate的被用作“只读”几类。在每个现场地图上建立.ReadOnly()确实很渺茫,我不确定我是否信任它。我如何设置类是完全只读的,因为我可以轻松地使用传统的XML映射?流利的NHibernate:如何映射整个班级为只读?

编辑:答案不工作。如果我试图保存一个ReadOnly()对象,我期望它会抛出一个异常,但它只是默默地这样做。

谢谢。

class EntityMap : ClassMap<Entity> 
{ 
    public EntityMap() 
    { 
     ReadOnly(); 

     // Mappings 
    } 
} 
+0

什么解决办法? – kaptan 2010-09-13 17:56:12

+0

@kaptan:我会编辑我对答案的评论。它确实有效。我只是期望它抛出一个异常,但它只是默默地忽略任何改变。 – rebelliard 2010-09-13 18:37:12

回答

32

用流利的NHibernate的,因为它是那么简单。 使用这个属性可以确保您检索到的对象是只读的,所以你不能更新它们。但是,它不会阻止创建新记录或甚至删除数据库中的现有记录!

11

只读()属性实际上不是那样,你会期望:

+1

嗯,没有注意到的是,这是疯了!我猜只读的混合物和受保护的构造是可行的。 – rebelliard 2012-05-11 14:20:33

+1

我认为,“不可改变的”,是因为它一个更好的名字。 – 2015-05-22 15:05:28

+0

'ReadOnly'是流利的命名,似乎他们已经认为它比原来的NHibernate命名更好,['可变=“假”'](http://nhibernate.info/doc/nhibernate-reference/mapping.html#映射声明类)。也许在他们的背景下,他们定义了'ReadOnly'on性质为'插入=“假”更新的简写=“假”',但在我看来,这是一个不幸的命名为类和集合的可变性。 – 2017-06-15 13:46:41