【问题标题】:NHibernate: How to set DynamicUpdate on all Entities?NHibernate:如何在所有实体上设置 DynamicUpdate?
【发布时间】:2013-10-17 22:11:30
【问题描述】:

如何在我的所有实体上设置 DynamicUpdate 和 DynamicInsert?

当我将它与我的映射代码放在一起时,它可以完美运行,但我只想为我的整个项目指定一次。

在创建会话时或在配置中找不到选项。

有什么想法吗?

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    我使用流利的 nhibernate,所以我会像这样更改它们:

    var fluentConfiguration = Fluently.Configure(NHibernate.Cfg.Configuration().Configure())
          .Mappings(m =>
              m.FluentMappings
              .AddFromAssemblyOf<OrderMap>()
              .Conventions.AddFromAssemblyOf<PascalCaseColumnNameConvention>())
              .ProxyFactoryFactory("NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate");
    
    var config = fluentConfiguration.BuildConfiguration();
    
    foreach(PersistentClass persistentClass in config.ClassMappings)
    {
        persistentClass.DynamicUpdate = true;
    }
    
    var sessionFactory = config.BuildSessionFactory();
    

    【讨论】:

    • 你读懂了我的想法,我也在使用流利的 nHibernate,所以这很完美。
    • 这种方法也适用于普通的 NHibernate,因为它正在修改 Configuration。另一个更 Fluent-NHibernate 式的选项是创建一个 IClassConvention。
    【解决方案2】:

    当使用按代码映射时,它就像这样简单:-

    var mapper = new ModelMapper();
    
    mapper.BeforeMapClass += (mi, t, map) =>
        {
            map.DynamicUpdate(true);
            map.DynamicInsert(true);
        };
    
    ...
    

    只需确保将其从所有类中逐个类映射中删除,因为它们会覆盖此约定。

    如果您确实想覆盖任何类定义,那么您也可以使用

    mapper.AfterMapClass += (mi, t, map) => { ... }
    

    【讨论】:

    • 这行得通,但我使用的是 Fluent NHibertnate,所以@Cole-w 的答案更适合一点。
    • 不用担心,已将标签Fluent-NHibernate 添加到您的原始帖子中。
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    相关资源
    最近更新 更多