gpt4 book ai didi

asp.net-mvc-3 - 如何使用 ravendb 在 mvc 3 应用程序中设置 Multi-Tenancy

转载 作者:行者123 更新时间:2023-12-04 08:28:19 26 4
gpt4 key购买 nike

我们通过以下方式使用 RavenDb 设置了 mvc3 应用程序(在 NoSql with RavenDb and Asp.net MVC 的帮助下):

以下代码位于 Global.asax

private const string RavenSessionKey = "RavenMVC.Session";
private static DocumentStore documentStore;

protected void Application_Start()
{
//Create a DocumentStore in Application_Start
//DocumentStore should be created once per
//application and stored as a singleton.
documentStore = new DocumentStore { Url = "http://localhost:8080/" };
documentStore.Initialise();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
//DI using Unity 2.0
ConfigureUnity();
}

public MvcApplication()
{
//Create a DocumentSession on BeginRequest
//create a document session for every unit of work
BeginRequest += (sender, args) =>
{
HttpContext.Current.Items[RavenSessionKey] = documentStore.OpenSession();
}

//Destroy the DocumentSession on EndRequest
EndRequest += (o, eventArgs) =>
{
var disposable =
HttpContext.Current.Items[RavenSessionKey] as IDisposable;

if (disposable != null)
disposable.Dispose();
};
}

//Getting the current DocumentSession
public static IDocumentSession CurrentSession
{
get { return (IDocumentSession)HttpContext.Current.Items[RavenSessionKey]; }
}

我们现在要设置应用程序以支持 Multi-Tenancy 。我们希望有两个文档存储:一个用于通用目的,系统数据库,另一个用于当前(登录的)租户。

根据我们当前的设置,我们如何实现这一目标?

编辑 :我们现在将我们的应用程序配置如下:

我们添加了 OpenSession(tenantid)BeginRequest在同一个 documentStore 上(感谢 Ayende 下面的回答)
var tenant = HttpContext.Current.Request.Headers["Host"].Split('.')[0];
documentStore.DatabaseCommands.EnsureDatabaseExists(tenant);
HttpContext.Current.Items[RavenSessionKey] =
documentStore.OpenSession(tenant);

因为我们使用 Ninject 进行 DI,所以我们添加了以下绑定(bind)以确保我们使用正确的 session :
kernel.Bind<ISession>().To<Session>().WhenInjectedInto<UserService>();
kernel.Bind<ISession>().To<TenantSession>();

kernel.Bind<IDocumentSession>().ToMethod(ctx =>
MvcApplication.CurrentSession).WhenInjectedInto<Session>();

kernel.Bind<IDocumentSession>().ToMethod(ctx =>
MvcApplication.CurrentTenantSession).WhenInjectedInto<TenantSession>();

也许有更好的方法来使用 ravendb 和 mvc 配置 Multi-Tenancy ?

最佳答案

安德鲁F,

那么你将有两个 session 。一个是默认的( OpenSession() ),另一个是租户的( OpenSession(TenantId) )

关于asp.net-mvc-3 - 如何使用 ravendb 在 mvc 3 应用程序中设置 Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517023/

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