【问题标题】:adding an nHibernate mapping at run time?在运行时添加 nHibernate 映射?
【发布时间】:2009-03-31 17:42:57
【问题描述】:

背景:

我在尝试使用 nHibernate 时遇到映射失败。该应用程序由几个程序集组成。其中一个程序集是有用的例程库,另一个是使用该库的应用程序代码。库程序集将自身添加到 nHibernate 配置中,但由于它不知道其他程序集,因此不会添加它们。我的 xml 映射文件位于应用程序程序集中。我认为它没有找到它,因为它没有在应用程序程序集中查找。

问题: 您可以在不将其添加到配置的情况下映射到任意程序集中的类吗?

如果没有,能否在运行时添加映射?

谢谢

附言 我确实确保映射文件被标记为嵌入式资源


更新 - 2009 年 4 月 3 日

我更改了底层库以允许在初始化时添加程序集。这似乎工作得很好。

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    您可以在构建会话工厂时在运行时添加映射:

    ISessionFactory sf = new Configuration()
        .AddFile("Item.hbm.xml")
        .AddFile("Bid.hbm.xml")
        .BuildSessionFactory();
    

    或使用程序集:

    ISessionFactory sf = new Configuration()
        .AddAssembly("NHibernate.Auction")
        .BuildSessionFactory();
    

    【讨论】:

    • 谢谢 :) 我看到了该选项,不幸的是该代码在库程序集中。它不知道其中的其他程序集或映射。您可以在会话构建/打开后添加它们吗?
    【解决方案2】:

    关于您的评论 - 不,一旦您构建了会话工厂,您就无法添加映射。但是,您可以重新创建会话工厂。请记住,虽然这可能是昂贵的操作(一秒钟左右)。

    【讨论】:

    • 谢谢,这有助于确认我的想法:)
    猜你喜欢
    • 2011-12-10
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多