動的テーブル名をエンティティにマップするにはどうすればよいですか? たとえば、多くのテーブルを作成できますが、すべて同じ構造ですが、名前が異なります。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 に答える