如何在不生成HBM XML文件的情况下创建动态NHibernate映射?

时间:2011-07-02 11:16:13

标签: nhibernate dynamic fluent-nhibernate castle-activerecord

我正在使用NHibernate开发动态应用程序。我的目标是根据一些数据创建动态实体(类类型和映射xml文件)。例如,假设我想在运行时和动态中动态创建Person实体。

我使用Reflection.Emit动态生成类类型。为了动态创建映射,我使用了Ayende's code.。但遗憾的是,此代码无效,因为mappings没有Classes属性。我尝试编码与Castle ActiveRecordFluent NHibernate的代码相同,但它们生成HBM XML文件。因为我不想生成/创建映射文件所以我不能使用这些解决方案。

有没有什么方法可以让Ayende的解决方案不被迫生成HBM XML映射文件,只是动态地在内存中做所有事情?

2 个答案:

答案 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层,可以满足您的需求。

我不是确定,如果动态类可以工作,但尝试没有坏处。