0

我有一个非常简单的 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();

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

谢谢!

4

1 回答 1

3

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

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

于 2009-03-16T21:30:54.930 回答