1

我正在为各种公司使用多租户应用程序。我还没有成功。但是我的情况是我有一个带有不同公司(租户)的表集的单个 sql server 数据库。

所以我想要做的是为表添加一个约定,该约定将根据多租户应用程序概念在表中使用其模式前缀访问表。我没有使用每个租户的数据库,而是使用每个租户的架构。数据库文件是单个文件。

我想做的是我的桌子是这样的Sachin Sales & Service Pvt Ltd$Web User Setup Header。所以我希望在生成表查询时,他们应该Sachin Sales & Service Pvt Ltd在查询之前动态添加前缀。前缀可能会根据要求更改。它不是静态的。所以我想到了覆盖默认情况下看起来像这样的 IClassConvention

 public class TableNameConvention : IClassConvention
{
    public void Apply(IClassInstance instance)
    {
        instance.Table( instance.EntityType.Name);
    }
}

无论如何我可以传递像这样的另一个参数string schemaname来生成带有模式前缀的所需表名吗?我的想法是做这样的事情:

public class TableNameConvention : IClassConvention
{
    public void Apply(IClassInstance instance, string schemaname )
    {
        instance.Table(schemaname + instance.EntityType.Name);
    }
}

如果是这样,我的问题是这样的。如果我能够达到上面提到的点,它会解决我的每个租户的架构问题吗?其次,即使上面在编译时没有给出任何错误(技术上不应该)我应该如何将模式名传递给那个覆盖?我的意思是我应该怎么打电话,因为这只是一个约定,我不能即时操纵它(我实际上想要这样做)

4

1 回答 1

2

您可以在配置 nhibernate 时为所有表设置架构使用,例如

Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.DefaultSchema(sometenantsSchema))
于 2012-04-26T10:24:51.223 回答