我正在使用NHibernate开发动态应用程序。我的目标是根据一些数据创建动态实体(类类型和映射xml文件)。例如,假设我想在运行时和动态中动态创建Person
实体。
我使用Reflection.Emit
动态生成类类型。为了动态创建映射,我使用了Ayende's code.。但遗憾的是,此代码无效,因为mappings
没有Classes
属性。我尝试编码与Castle ActiveRecord
和Fluent NHibernate
的代码相同,但它们生成HBM XML文件。因为我不想生成/创建映射文件所以我不能使用这些解决方案。
有没有什么方法可以让Ayende的解决方案不被迫生成HBM XML映射文件,只是动态地在内存中做所有事情?
答案 0 :(得分:2)
fluentnhibernate在内存中创建hbm只是为了将它们提供给nhibernate。 fluentnhibernate具有很好的自动化功能,具有成本合理的约定,非常适合这种情况。同样在FNH 2.0中,他们正在努力跳过hbm以获得更好的性能,但通常你永远不会看到内存之外的映射。
样品:
Assembly assembly = GetDynamicallyCreatedTypesAssembly();
ISessionFactory sf = Fluently.Configure()
.Database(...)
.Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assembly)))
.BuildSessionFactory();
答案 1 :(得分:1)
NHibernate 3.2有一个mapping-by-code层,可以满足您的需求。
我不是确定,如果动态类可以工作,但尝试没有坏处。