如何将动态表名映射到实体? 例如,我可以有很多表,都具有相同的结构,但是,它有不同的名称,我如何使用Fluent NHibernate进行映射? 记住在编译之前我不知道这些表的名称。 任何人都可以帮助我吗?
答案 0 :(得分: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();
}