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

时间:2012-04-25 08:55:00

标签: nhibernate fluent-nhibernate

我正在为各种公司使用多租户申请。我还没有成功。但我的情况是,我有一个单独的SQL Server数据库,其中包含不同公司的表集(租户)。

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

我想做的是我的表格就像这样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);
    }
}

如果是这样,我的问题就像这样。如果我能够达到上面提到的这一点,它将解决我的每个租户问题的架构吗? 第二,即使上面在编译时没有给出任何错误(技术上不应该)我应该如何将schemaname传递给覆盖?我的意思是我应该如何打电话,因为这只是一个惯例,我无法在飞行中操纵它(我实际上想要这样做)

1 个答案:

答案 0 :(得分:1)

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

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