gpt4 book ai didi

nhibernate - 如何在Fluent NHibernate中按 namespace 添加映射

转载 作者:行者123 更新时间:2023-12-04 04:52:20 25 4
gpt4 key购买 nike

在我的应用程序中,我需要与多个数据库进行对话。我在NHibernate中通过为每个数据库创建一个SessionFactory来处理此问题(我认为这是正确的做法)。因此,我有两套模型(每个数据库一套)和两套Fluent NHibernate ClassMap<>映射。两者都在同一个项目中(由 namespace 分隔),我想保持这种方式。

创建SessionFactory时出现问题。据我所知,Fluent NHibernate基本上有两种添加映射的方法:

    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserClassMap>())
.Mappings(m => m.FluentMappings.Add<UserClassMap>()

如果我使用第一个重载,那么我的 session 工厂将获得两个数据库的所有映射。如果使用第二个,则必须指定每个单独的ClassMap。我想要类似 FluentMappings.AddFromNamespace()的东西。有没有办法做到这一点?

最佳答案

奇怪的是FluentNHibernate支持这种类型的自动映射过滤,但不支持ClassMap。不过,通过扩展方法的神奇之处,自己添加此功能并不难。试试这个:

public static FluentMappingsContainer AddFromAssemblyOf<T>(
this FluentMappingsContainer mappings,
Predicate<Type> where)
{
if (where == null)
return mappings.AddFromAssemblyOf<T>();

var mappingClasses = typeof(T).Assembly.GetExportedTypes()
.Where(x => (typeof(IMappingProvider).IsAssignableFrom(x)
|| typeof(IExternalComponentMappingProvider).IsAssignableFrom(x))
&& where(x));

foreach (var type in mappingClasses)
{
mappings.Add(type);
}

return mappings;
}

...并像这样使用它:
m.FluentMappings.AddFromAssemblyOf<UserClassMap>(t => t.Namespace.StartsWith("One.Of.The.Two.Namespaces"));

关于nhibernate - 如何在Fluent NHibernate中按 namespace 添加映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6204511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com