Nhibernate 和 Fluent Nhibernate 的只读策略

cho*_*bo2 4 nhibernate fluent-nhibernate

我一直在为初学者阅读 nhibernate 3.0 并阅读了一些常见错误(我犯了一些错误)

我想知道将一个或多个记录设为只读有哪些策略。现在我取回所有行并循环遍历它们,使它们通过 session.Readonly() 成为只读。

我喜欢在书中他们用流利的方式做的

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

        // Mappings
    }
 }
Run Code Online (Sandbox Code Playgroud)

我不确定的是,如果我需要这些记录不是只读的,会发生什么?对我来说,这意味着我必须制作完全相同的映射减去那两行代码。

所以我想这样做并拥有 ReadonlyEntityMap 和 EntityMap 但我宁愿不必将所有设置复制两次。

任何人都有关于如何做到这一点的想法?或者更好的 readonly 想法?

Mar*_*rry 5

ReadOnly()当您修改对象的属性时,在您的映射上使用将禁用对数据库的任何更新。

如果你想应用某种 ReadOnly 和 Writeable 策略,我建议使用Fluent 约定和标记界面或类似的。

ReadOnly()如果您只想禁用对该属性的写入,您也可以申请该属性。我使用该技术来避免写回 SQL Server 中的计算列。

像这样的东西:

public interface IReadOnly{} //Mark entities with this interface

public class ReadOnlyConvention
     : IClassConvention, IClassConventionAcceptance<IClassInspector>
{
  public void Accept(IAcceptanceCriteria<IClassInspector> criteria)
  {
    criteria.Expect(x => x.EntityType Is IReadOnly);
  }

  public void Apply(IClassInstance instance)
  {
    instance.ReadOnly();
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:如果您想做时间转换,我建议为您的 DateTime 对象创建一个 IUserType,该对象在不修改基础数据的情况下转换为用户时间。