gpt4 book ai didi

asp.net-mvc - Multi-Tenancy w/NHibernate+CaSTLe Windsor(单个应用程序,多个数据库)

转载 作者:行者123 更新时间:2023-12-02 00:34:03 25 4
gpt4 key购买 nike

创建一个 Multi-Tenancy asp.net mvc 3 应用程序,每个租户具有单个应用程序实例/多个数据库。还将有一个单独的“主”数据库,用于存储特定于租户的信息(启用的功能、租户数据库连接信息等)。 NHibernate 和 IOC(温莎城堡)的新手并使用过 this tutorial进行基本的 CRUD 设置。

以下是我使用(来自上述教程)来“使用”NHibernate 的内容:

 public class PersistenceFacility : AbstractFacility
{
protected override void Init()
{
var config = BuildDatabaseConfiguration();

Kernel.Register(
Component.For<ISessionFactory>()
.UsingFactoryMethod(config.BuildSessionFactory),
Component.For<ISession>()
.UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession())
.LifeStyle.PerWebRequest);
}

private Configuration BuildDatabaseConfiguration()
{
return Fluently.Configure()
.Database(SetupDatabase)
.Mappings(m =>
{
m.FluentMappings.AddFromAssemblyOf<SectionMap>()
.Conventions.AddFromAssemblyOf<TableNameConvention>();
})
.ExposeConfiguration(ConfigurePersistence)
.BuildConfiguration();
}

protected virtual AutoPersistenceModel CreateMappingModel()
{
var m = AutoMap.Assembly(typeof(EntityBase).Assembly)
.Where(IsDomainEntity)
.OverrideAll(ShouldIgnoreProperty)
.IgnoreBase<EntityBase>();

return m;
}

protected virtual IPersistenceConfigurer SetupDatabase()
{
return MsSqlConfiguration.MsSql2008
.DefaultSchema("dbo")
.UseOuterJoin()
.ProxyFactoryFactory(typeof(ProxyFactoryFactory))
.ConnectionString(x => x.FromConnectionStringWithKey("MasterDB"))
.ShowSql();
}

protected virtual void ConfigurePersistence(Configuration config)
{
SchemaMetadataUpdater.QuoteTableAndColumns(config);
}

protected virtual bool IsDomainEntity(Type t)
{
return typeof(EntityBase).IsAssignableFrom(t);
}

private void ShouldIgnoreProperty(IPropertyIgnorer property)
{
property.IgnoreProperties(p => p.MemberInfo.HasAttribute<DoNotMapAttribute>());
}
}

我正在考虑采取的方法是应用程序将查看主机 header /url 来确定租户,然后查询“主”数据库以获取相应租户的数据库连接信息。我猜我必须采取的方法是每个客户端都有一个单独的 SessionFactory - 唯一的问题是我不知道如何(以及在​​哪里)集成它。希望能得到任何帮助/指示,以更好地了解如何[a]解决此问题[b]更好地了解如何使用温莎城堡。抱歉,如castle site似乎是一个很好的资源,但对于像我这样的新手来说不容易理解。

谢谢!

环境:ASP.NET MVC 3、.NET 4、CaSTLe Windsor + Fluent NHibernate + NHibernate(通过 NuGet)

最佳答案

通常采取的方法是拥有多个 session 工厂(每个租户一个),并使用 IHandlersSelector 根据请求中的一些数据选择正确的 session 工厂。

关于文档不太容易理解的评论,如果您愿意指出您觉得不太容易理解的部分,我们很乐意改进它。

关于asp.net-mvc - Multi-Tenancy w/NHibernate+CaSTLe Windsor(单个应用程序,多个数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906701/

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