问题: 如何将表示表名的字符串传递给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 - 不确定这是否重要。
答案 0 :(得分:1)
除非我遗漏了某些内容,否则你可以使用ConfigurationManager
类:
public class MyClassMap()
{
var table = ConfigurationManager.AppSettings["logicalTable2"];
Table(table);
...
}
您的项目需要引用System.Configuration
程序集。
<强>更新强>
或使用&#34; TableNameProvider&#34;类:
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类。
我不确定你是否可以在Fluent-NHibernate中注入MappingFactory或其他东西来处理映射文件依赖和真正的注入。需要注意的事情。