NHibernate fluent映射-在运行时指定表?

NHibernate fluent映射-在运行时指定表?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,问题: 如何将表示表名的字符串传递给NHibernate类映射 详细信息: 我有几个几乎相同的数据库,表和视图名称有一些细微的变化。我希望能够通过app.config文件中的配置参数处理这些变化。例如,我可以使用以下自定义部分为特定配置指定表名: <tableNames> <add key="logicalTable1" value="ACTUAL_TABLE_1"/> <add key="logicalTable2" value="ACTUAL_T

问题: 如何将表示表名的字符串传递给NHibernate类映射

详细信息: 我有几个几乎相同的数据库,表和视图名称有一些细微的变化。我希望能够通过app.config文件中的配置参数处理这些变化。例如,我可以使用以下自定义部分为特定配置指定表名:

<tableNames>
    <add key="logicalTable1" value="ACTUAL_TABLE_1"/>
    <add key="logicalTable2" value="ACTUAL_TABLE_2"/>
</tablenames>

现在,如果我在运行时加载这些配置参数,那么如何将表名放入类映射(即

公共类MyClassMap:ClassMap
{
公共类MyClassMap()
{

Table(“ACTUAL_Table_1”);//除非我遗漏了什么,否则您可以使用
ConfigurationManager
类:

public class MyClassMap()
{
  var table = ConfigurationManager.AppSettings["logicalTable2"];
  Table(table);
...
}
您的项目需要引用
系统配置
程序集

更新:

或者使用“TableNameProvider”类:

我不确定如何使用Ninject实现这一点,但假设它与其他容器类似:

public class MyClassMap()
{
  var provider = GetMyContainer().GetInstance<ITableProvider>();
  var table = provider.LogicalTable1;
  Table(table);
...
}
公共类MyClassMap()
{
var provider=GetMyContainer().GetInstance();
var table=provider.LogicalTable1;
表(表);
...
}
这样,您只需要更改TableNameProvider类


我不确定是否可以将MappingFactory或其他东西注入到Fluent NHibernate中,以处理映射文件依赖项和真实注入。需要研究的东西。

我唯一的犹豫是,它实际上是在创建对全局对象的依赖项。例如,自定义部分是NamedValueFileSectionHandler——如果我我想在将来改变它吗?这需要修改每个映射类。有趣的方法。我不知道
ITableNameProvider
存在。我想建议映射类可以有一个允许设置表的公共属性,您可以在构建
SessionFactory
ITableProvider
不存在,它只是一个用于上面我的实现的接口。
public interface ITableNameProvider
{
        string LogicalTable1 { get; }
}

public class TableNameProvider : ITableNameProvider
{
        public string LogicalTable1 { get { return ConfigurationManager.AppSettings["logicalTable1"]; } }
}
public class MyClassMap()
{
  var provider = GetMyContainer().GetInstance<ITableProvider>();
  var table = provider.LogicalTable1;
  Table(table);
...
}