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 に答える