【问题标题】:LocalSessionFactoryObject - MappingResources - Path to the hbm fileLocalSessionFactoryObject - MappingResources - hbm 文件的路径
【发布时间】:2012-03-22 17:17:26
【问题描述】:

项目结构为:

现在我正在尝试创建一个 bean NHibernateSessionFactory 为:

<object id="NHibernateSessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate32">
    <property name="DbProvider" ref="DbProvider"/>
    <property name="MappingResources">
    <list>
        <value>EMSApplication.Domain/EMSApplication.hbm.xml</value>
    </list>
    </property>
    <property name="HibernateProperties">
    <dictionary>
        <entry key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
        <entry key="dialect" value="NHibernate.Dialect.MsSql2008Dialect"/>
        <entry key="connection.driver_class" value="NHibernate.Driver.SqlClientDriver"/>
        <entry key="proxyfactory.factory_class" value="NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate"/>
        <entry key="show_sql" value="true"/>
        <entry key="hbm2ddl.auto" value="update"/>
        <entry key="cache.use_query_cache" value="true"/>
    </dictionary>
    </property>

    <property name="ExposeTransactionAwareSessionFactory" value="true" />
</object>

但我收到错误消息:

Error creating context 'spring.root': file [C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\EMSApplication.Domain\EMSApplication.hbm.xml] cannot be resolved to local file path - resource does not use 'file:' protocol.

现在项目在D盘,不知道为什么指向C盘?

另外如何在映射资源中添加指定的hbm文件?此文件设置为“嵌入式资源”。

有没有办法在这里指定一个目录来扫描多个hbm文件?

任何信息都会对我很有帮助。

【问题讨论】:

    标签: c# nhibernate spring.net mapping-resources


    【解决方案1】:

    您没有在资源名称中使用协议标识符(例如 file://assembly://),因此 Spring 使用默认文件协议。它尝试从运行 Web 应用程序的位置(devserver 路径)解析 hbm 文件,不是文件存储的位置,这是您所期望的。

    要引用您网站中的文件,请使用 ~ 来标识您网站的根目录,例如&lt;value&gt;file://~/EMSApplication.Domain/EMSApplication.hbm.xml&lt;/value&gt;。但是请确保文件被复制,这可能不是这种情况,因为您已将其设置为嵌入式资源(为什么?)。

    考虑以下改进,它们会让您的生活更轻松:

    • 将文件夹daodomainNHibernate 中的代码移动到名为Your.AssemblyName 的单独程序集(从您的Web 应用程序引用的类库项目)。
    • 会话工厂还支持指定要扫描的映射程序集,因此您不必指定每个文件 - 请参阅setting up a session factory using spring.net 上的文档。在映射汇编列表中指定Your.AssemblyName
    <object id="MySessionFactory" type="Spring.Data.NHibernate.LocalSessionFactoryObject, Spring.Data.NHibernate">
      <property name="DbProvider" ref="DbProvider"/>
      <property name="MappingAssemblies">
        <list>
          <value>Your.AssemblyName</value>
        </list>
      </property>
      <property name="HibernateProperties">
      <!-- snip -->
    </object>
    

    并查看the NHibernate example in the spring docs - 它非常适用于您在此处提出的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-28
      • 2018-09-29
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      相关资源
      最近更新 更多