【问题标题】:NHibernate with fluent mapping and Syscache2 second level caching具有流畅映射和 Syscache2 二级缓存的 NHibernate
【发布时间】:2010-10-13 15:27:51
【问题描述】:

我有一个非常简单的 Country 实体,我想缓存它。这非常有效,但我希望返回缓存实例的克隆版本或将其设为只读,以防止开发人员更改它的状态。

我将如何实现这一目标?我坚信 Fluent Readonly() 方法会强制执行此操作,但事实并非如此。

流利映射示例:

        Id(x => x.Id);
        Map(x => x.Name).WithLengthOf(50).Not.Nullable().Unique();
        Map(x => x.IsoCode).WithLengthOf(10).Not.Nullable().Unique();
        HasMany(x => x.States).Cascade.None().LazyLoad();          
        Cache.AsReadOnly();

我的单元测试清楚地表明实体被缓存并且在后续获取时返回相同的实体,但我希望对象在从持久存储加载后是不可变的。

谢谢!

【问题讨论】:

    标签: nhibernate fluent-nhibernate second-level-cache


    【解决方案1】:

    如果您希望您的类的实例是不可变的(从某种意义上说,不可能修改对象实例),那么您需要根据它来编写您的类 - 这与 NHib 或 Fluent NHib 无关。例如,将 NHib 映射到私有字段或私有属性设置器,并且只公开属性获取器。

    使用 NHib,可以在您的类映射上指定“mutable=false”(不确定如何使用 FNH 执行此操作,抱歉)。这不会使对象在运行时不可变,但它会通知 NHib 不要检查这些实体的插入、更新和删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2010-11-22
      • 2012-09-05
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多