gpt4 book ai didi

.net - 流利的NHibernate +多个数据库

转载 作者:行者123 更新时间:2023-12-04 03:41:18 28 4
gpt4 key购买 nike

我的项目需要处理三个数据库,这意味着三个 session 工厂。问题是如果我用流利的nhibernate做这样的事情:

.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly()))

工厂将获取所有映射,甚至是对应于另一个数据库的映射

我已经看到,使用自动映射时,您可以执行以下操作,并按 namespace 进行过滤:
.Mappings(m => m.AutoMappings.Add(
AutoMap
.AssemblyOf<Product>()
.Where(t => t.Namespace == "Storefront.Entities")))

我还没有找到类似这样的内容来进行流畅的映射,这可能吗?我能想到的唯一解决方案是:为每个数据库映射类创建单独的程序集,或将每个实体显式添加到出厂配置。

如果可能的话,我宁愿避免两者。谢谢。

最佳答案

我已经使用Fluent映射文件上的(我自己的)属性来实现这一点,以指示实体所属的DB。我也有了一个“默认”数据库的概念,并且假定没有属性的映射文件将驻留在该数据库中。在默认数据库中(它可能会减少您需要装饰的类的数量)。
然后,我有了初始化代码,该初始化代码为每个数据库创建一个 session 工厂,并为每个数据库使用反射来查找所有ClassMap类,检查属性以确定它属于哪个DB,并相应地注册每个ClassMap。

映射文件示例:

  [FluentNHibernateDatabase("MySecurityDatabase")]
public class SystemUserMap : ClassMap<SystemUser>
{
public SystemUserMap()
{
Id(x => x.SystemUserId);
Map(x => x.LoginId);
Map(x => x.LoginPassword);
Map(x => x.UserFirstName);
Map(x => x.UserSurname);
References(x => x.UserOrganisation, "OrganisationId");
}
}

显然,我已经定义了引用/使用的数据库列表。
就我所知,我的实现工作正常,但遇到了麻烦(希望有人可以提供帮助):

我在这里问了我的问题:
How to identify a particular entity's Session Factory with Fluent NHibernate and Multiple Databases

关于.net - 流利的NHibernate +多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2655861/

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