流畅的NHibernate与动态表名称

时间:2013-08-05 19:30:11

标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping

如何将动态表名映射到实体? 例如,我可以有很多表,都具有相同的结构,但是,它有不同的名称,我如何使用Fluent NHibernate进行映射? 记住在编译之前我不知道这些表的名称。 任何人都可以帮助我吗?

1 个答案:

答案 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();
}