同一数据库的不同映射。 NHibernate的

时间:2013-07-19 04:57:21

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我正在使用Fluent NHibernate。 我有一些使用相同数据库的应用程序(主要是应用程序本身,以及它的配置和报告工具,它们是单独的.exe)它们现在共享相同的映射,在流行的.dll中流利地定义。它们之间的最大区别在于它们以非常不同的方式使用数据库的某些部分。有些表对于一个工具是只读的,但对另一个工具是读写的。 我想确保该工具永远不会将数据写入“错误”表。

我的想法是让每个工具的每个映射都有所不同。映射的一般基础是相同的,但我可以添加扩展方法来检查运行映射配置的工具的名称,并为每个工具添加不同的映射规范:

  • 对于某些工具,我想要一些表.ReadOnly()(mutable =“false”)
  • 我想为每个工具以不同的方式关闭/启用级联。

但我有点不确定,我是否正确。有什么陷阱吗?有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

选项1

你可以编写一个返回所有映射的方法,这些映射根据调用者改变它们并手动将映射添加到上下文中

public IEnumerable<IMappingProvider> GetAllMappings(MappingMode mode)
{
    yield return new UserMap();

    var fooMap = new FooMap();
    if (mode == MappingMode.Reporting)
        fooMap.ReadOnly();
    yield return fooMap
}

var model = new PersistenceModel();
foreach (var mapping in GetAllMappings(mappingMode)
{
    model.Add(mapping);
}

Fluently.Configure().Mappings(m => m.UsePeristenceModel(model))

选项2

根据改变映射的应用程序添加自定义约定