gpt4 book ai didi

nhibernate - 使用 asp mvc 2 和 nhibernate 的单个网站多个​​连接字符串

转载 作者:行者123 更新时间:2023-12-02 13:10:23 25 4
gpt4 key购买 nike

在我的网站中,我使用 ASP MVC 2 + Fluent NHibernate 作为 orm,StructureMap 用于 IoC 容器。

有多个数据库具有相同的元数据(因此实体和映射是相同的)。在登录页面上,用户输入登录名、密码、记住我并从下拉列表中选择他的服务器(实际上他选择数据库)。

Web.config 包含所有连接字符串,我们可以假设它们在运行时不会更改。

我认为每个数据库都需要有一个 session 工厂。

在使用多个数据库之前,我将类加载到 Application_Start 中的 StructureMap ObjectFactory

ObjectFactory.Initialize(init => init.AddRegistry<ObjectRegistry>());
ObjectFactory.Configure(conf => conf.AddRegistry<NhibernateRegistry>());

NhibernateRegistry 类:

public class NhibernateRegistry : Registry
{
public NhibernateRegistry()
{
var sessionFactory = NhibernateConfiguration.Configuration.BuildSessionFactory();

For<Configuration>().Singleton().Use(
NhibernateConfiguration.Configuration);
For<ISessionFactory>().Singleton().Use(sessionFactory);
For<ISession>().HybridHttpOrThreadLocalScoped().Use(
ctx => ctx.GetInstance<ISessionFactory>().GetCurrentSession());
}

}

在Application_BeginRequest中,我将打开的nhibernate session 绑定(bind)到asp session (每个请求的nhibernate session ),并在EndRequest中取消绑定(bind)它们:

 protected void Application_BeginRequest(
object sender, EventArgs e)
{
CurrentSessionContext.Bind(ObjectFactory.GetInstance<ISessionFactory>().OpenSession());
}

Q1:如何根据经过身份验证的用户来实现应该使用哪个SessionFactory?是不是类似于 UserData 填充数据库名称(我使用简单的 FormsAuthentication)

对于日志记录,我使用log4net,即AdoNetAppender,其中包含connectionString(当然,在xml中)。问题 2:我如何管理此数据库附加程序的多个连接字符串,以便将日志写入当前数据库?除了一直更改 xml 并重置 xml 配置之外,我不知道该怎么做,但这确实是一个糟糕的解决方案。

最佳答案

I suppose that it is required to have one session factory per database.

没有;您可以使用一个 session 工厂来处理两个数据库。

您只需将打开的 IDbConnection 作为参数提供给 OpenSession()方法ISessionFactory .

这样做,您将失去二级缓存的可能性,但这可能不是问题。

如果你想要二级缓存,你需要实现你自己的DriverConnectionProvider并通过 fluid nh's Provider<TYourDriverConnectionProvider>() 提供它方法。

关于nhibernate - 使用 asp mvc 2 和 nhibernate 的单个网站多个​​连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995624/

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