向Nhibernate表命名约定添加架构前缀

向Nhibernate表命名约定添加架构前缀,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我正在为多家公司使用多租户应用程序。我还没有在这方面取得成功。但我的场景是,我有一个sql server数据库,其中包含不同公司(租户)的表集 所以我想做的是为表添加一个约定,它将按照多租户应用程序的概念,使用表中的模式前缀访问表。我不是按租户使用数据库,而是按租户使用模式。数据库文件是单个文件 我要做的是,我的表如下所示Sachin Sales&Service Pvt Ltd$Web User Setup Header。因此,我希望在生成表查询时,他们应该在查询之前动态添加前缀Sachin S

我正在为多家公司使用多租户应用程序。我还没有在这方面取得成功。但我的场景是,我有一个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
,以生成所需的带有schema前缀的tablename?我的想法是这样做:

public class TableNameConvention : IClassConvention
{
    public void Apply(IClassInstance instance, string schemaname )
    {
        instance.Table(schemaname + instance.EntityType.Name);
    }
}
如果是的话,我的问题是这样的。如果我能够达到上面提到的点,它会解决我的每租户模式问题吗?
第二,即使上面的代码在编译时没有给出任何错误(技术上不应该),我应该如何将schemaname传递到该重写中?我的意思是我应该如何调用,因为这只是一个约定,我不能动态地操作它(我实际上想这么做)

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

Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.DefaultSchema(sometenantsSchema))

在查询时向表命名添加前缀的Wil?这将向所有映射添加架构前缀(通过配置属性“default_schema”,请参阅NHibernate.Cfg.Environment.DefaultSchema)。查询是从映射生成的