2

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

4

1 回答 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 回答