如何将动态表名映射到实体?例如,我可以有很多表,都具有相同的结构,但是,有不同的名称,我如何使用 Fluent NHibernate 映射它?记得在编译之前我不知道这些表的名称。谁能帮我?
问问题
1574 次
1 回答
0
您可能需要做的是在流利的 nhibernate 映射中为表名放置一个占位符,然后在构建映射后替换它。
看看下面的文章,我认为第一个代码示例会让您了解您需要做什么。
http://ayende.com/blog/3294/dynamic-mapping-with-nhibernate
我能够做到这一点。这是一个粗略的例子:
var fluentConfiguration = Fluently.Configure(NHibernate.Cfg.Configuration().Configure())
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<OrderMap>()
.Conventions.AddFromAssemblyOf<PascalCaseColumnNameConvention>())
.ProxyFactoryFactory("NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate");
var config = fluentConfiguration.BuildConfiguration();
foreach(PersistentClass persistentClass in config.ClassMappings)
{
if(persistentClass.MappedClass == typeof(Order))
{
persistentClass.Table.Name = "Dynamic Table";
}
}
//You could substitute above for each loop with linq unless you have a bunch to replace then use foreach
//config.ClassMappings.First(x => x.MappedClass == typeof(Order)).Table.Name = "Dynamic Table";
var sessionFactory = config.BuildSessionFactory();
using(ISession session = sessionFactory.OpenSession())
{
Order order = session.Query<Order>().FirstOrDefault();
}
于 2013-08-06T19:41:25.107 回答