问题:如何将表示表名的字符串传递给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中,以处理映射文件依赖关系和真正的注入。要调查的事情。