【问题标题】:NHibernate MappingException. No PersisterNHibernate 映射异常。没有坚持
【发布时间】:2011-10-13 12:27:03
【问题描述】:

我正在尝试让 NHibernate 工作。我有这门课:

mm.k.Domain.Kampagne

(命名空间/程序集是 mm.k.Domain)

在另一个 Visual Studio 项目(Assembly mm.k.Infrastructure)中,我得到了我的映射文件(在 Mappings 目录中)、我的 hibernate.cfg.xml 和一些存储库。

这是我的映射文件:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="mm.k.Domain"
                   namespace="mm.k.Domain">

  <class name="Kampagne" table="Kampagner">
    <id name="Id">
      <generator class="identity" />
    </id>
    <property name="Navn" not-null="true" />
    <property name="Logo" />
  </class>

</hibernate-mapping>

当我配置会话时,我会这样做:

_configuration.AddAssembly(typeof(mm.k.Domain.Kampagne).Assembly);

那是行不通的! 调用时:

var test = session.Get<Kampagne>(kampagneId);

我收到以下错误: “没有持久性:mm.k.Domain.Kampagne” 就像它没有注册嵌入式映射文件一样。请注意,我将映射文件的构建操作设置为嵌入式资源。

如果我将上面的行更改为:

_configuration.AddFile(@"fullpath\mm.k.Infrastructure\Mappings\Kampagne.hbm.xml");

一切正常!

有什么想法吗?提前致谢。

【问题讨论】:

    标签: nhibernate nhibernate-mapping


    【解决方案1】:

    如果有人像我一样遇到 Hibernate.NET 的这个问题。 确保您在属性窗口中为您的文件选择了 Build Action 作为“嵌入式资源”

    【讨论】:

    • 完美,为我做到了,不像这里的任何其他答案。不错。
    【解决方案2】:

    不确定你的 nhibernate.cfg.xml 文件是什么样的,但我通常有这样的项目

    <mapping assembly="mm.K.Infrastructure"/>
    

    根据您提供的信息。 NHibernate 使用它从这个特定的程序集中加载映射文件。

    这应该会为您提供所需的映射。

    【讨论】:

    • 成功了。谢谢!奇怪的是 NHibernate 入门教程没有提到这个?
    【解决方案3】:

    我遇到了问题。但是突然观察到没有嵌入映射文件。 转到 .hbm.xml 文件。单击属性。然后高级 -> 选择“嵌入式资源”

    【讨论】:

      【解决方案4】:

      每当你使用 hbm.xml 文件时,你都会像这样设置你的配置类:

      Configuration cfg = new Configuration();
      cfg.Configure();
      // Add class mappings to configuration object
      cfg.AddAssembly(Assembly.GetCallingAssembly());
      ISessionFactory sessionFactory = cfg.BuildSessionFactory();
      

      每当您使用 Nhibernate.Mapping.Attributes 之类的类时,您都必须使用: 例如,您在产品类中使用了 Mapping.attributes

      Configuration cfg = new Configuration();
      cfg.Configure();
      // Add class mappings attributes to configuration object
      cfg.AddInputStream(HbmSerializer.Default.Serialize(typeof(Model.Product);
      ISessionFactory sessionFactory = cfg.BuildSessionFactory();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 2014-04-19
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多