NHibernate InMemory tests



我正在尝试使用NHibernate的内存测试,我在这个小项目中成功地做到了这一点:https://github.com/demojag/NHibernateInMemoryTest

正如你从物体的地图上看到的那样,我不得不评论这一行://SchemaAction.Noe();测试将失败。此选项隐藏模式导出

我想这只是我所做的评论,因为到目前为止,我还没有找到关于Schema Actions的严肃文档。

我之所以做这些测试,是因为我想在内存中测试现有的情况,但所有实体映射都有SchemaActions.None()选项,当我尝试执行内存中测试时,我会得到很多"没有这样的表"。

我想知道是否存在将Schema操作选项设置为none并导出模式的方法?(我知道这可能是违反封装的行为,所以这并没有多大意义)。

我想把这个选项设置为none,因为它是一个"DatabaseFirst"应用程序,我不能冒险在每次构建配置时删除数据库并重新创建它,但我想,如果在配置中我没有指定指令"exposeConfiguration"和SchemaExport,我会很安全。

谢谢你的建议

朱塞佩。

您应该能够通过NHibernate.Cfg.Configuration.BeforeBindMapping事件覆盖HBM或Fluent NHibernate映射中的任何和所有设置,该事件允许您在程序运行时访问NHibernat的内部模型进行映射。请参阅下面的示例,该示例设置BeforeBindMapping事件处理程序,该事件处理程序将覆盖映射中指定的SchemaAction。

public NHibernate.Cfg.Configuration BuildConfiguration()
{
    var configuration = new NHibernate.Cfg.Configuration();
    configuration.BeforeBindMapping += OnBeforeBindMapping;
    // A bunch of other stuff...
    return configuration;
}
private void OnBeforeBindMapping( object sender, NHibernate.Cfg.BindMappingEventArgs bindMappingEventArgs )
{
    // Set all mappings to use the fully qualified namespace to avoid class name collision
    bindMappingEventArgs.Mapping.autoimport = false;
    // Override the schema action to all
    foreach ( var item in bindMappingEventArgs.Mapping.Items )
    {
        var hbmClass = item as NHibernate.Cfg.MappingSchema.HbmClass;
        if ( hbmClass != null )
        {
            hbmClass.schemaaction = "all";
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新