0

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

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

  • 对于某些工具,我希望某些表为 .ReadOnly() (mutable="false")
  • 我想为每个工具以不同的方式关闭/打开级联。

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

4

1 回答 1

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

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

于 2013-07-19T07:13:00.963 回答