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



问题:如何将表示表名的字符串传递给NHibernate ClassMap?

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

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

现在,如果我在运行时加载这些配置参数,我如何将表名获取到ClassMap(即

public class MyClassMap : ClassMap<MyClass>
{
    public class MyClassMap()
    {
         Table("ACTUAL_TABLE_1");   // <--- HERE I WANT Table(logicaTable1) 
    ...
}

注意:我正在使用Ninject注入ISessionFactory——不确定这是否重要。

除非我遗漏了什么,否则您可以使用ConfigurationManager类:

public class MyClassMap()
{
  var table = ConfigurationManager.AppSettings["logicalTable2"];
  Table(table);
...
}

您的项目将需要引用System.Configuration程序集。

更新:

或者使用"TableNameProvider"类:

public interface ITableNameProvider
{
        string LogicalTable1 { get; }
}
public class TableNameProvider : ITableNameProvider
{
        public string LogicalTable1 { get { return ConfigurationManager.AppSettings["logicalTable1"]; } }
}

我不确定如何使用Ninject做到这一点,但假设它和其他容器一样:

public class MyClassMap()
{
  var provider = GetMyContainer().GetInstance<ITableProvider>();
  var table = provider.LogicalTable1;
  Table(table);
...
}

这样,您只需要更改TableNameProvider类。

我不确定是否可以将MappingFactory或其他东西注入Fluent NHibernate中,以处理映射文件依赖关系和真正的注入。要调查的事情。

最新更新