NHibernate:没有持久性错误

时间:2010-03-28 03:05:17

标签: asp.net-mvc nhibernate

在我追求进一步了解的过程中,我正在尝试让NHibernate运行。

我的解决方案有以下结构

  • 核心类库项目
  • 基础设施类库项目
  • MVC应用项目
  • 测试项目

在我的Core项目中,我创建了以下实体:

using System;

namespace Core.Domain.Model
{
    public class Category
    {
        public virtual Guid Id { get; set; }

        public virtual string Name { get; set; }
    }
}

在我的基础设施项目中,我有以下映射:

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

  <class name="Category" table="Categories" dynamic-update="true">
    <cache usage="read-write"/>
    <id name="Id" column="Id" type="Guid">
      <generator class="guid"/>
    </id>
    <property name="Name" length="100"/>
  </class>
</hibernate-mapping>

使用以下配置文件:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">server=xxxx;database=xxxx;Integrated Security=true;</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="cache.use_query_cache">false</property>
    <property name="adonet.batch_size">100</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    <mapping assembly="Infrastructure" />
  </session-factory>
</hibernate-configuration>

在我的测试项目中,我有以下测试

 [TestMethod]
        [DeploymentItem("hibernate.cfg.xml")]
        public void CanCreateCategory()
        {
            IRepository<Category> repo = new CategoryRepository();
            Category category = new Category();
            category.Name = "ASP.NET";

            repo.Save(category);

        }

当我尝试运行测试时出现以下错误:

测试方法Volunteer.Tests.CategoryTests.CanCreateCategory引发异常:NHibernate.MappingException:没有持久性:Core.Domain.Model.Category。

非常感谢任何帮助。我确实将cfg构建操作设置为嵌入式资源。

谢谢!

2 个答案:

答案 0 :(得分:0)

我猜测问题是您在Test程序集中配置SessionFactory而没有告诉它您的映射是在Core程序集中,如

ISessionFactory factory = new Configuration().Configure()
    .AddAssembly(typeof(Category).Assembly) <========***
    .BuildSessionFactory();

如果这没有帮助,请发布配置代码。

干杯,
Berryl

答案 1 :(得分:0)

必须在Embedded Resource程序集中将XML映射文件的Build Action设置为Infrastructure。在配置文件中使用以下指令时:<mapping assembly="Infrastructure" />它将在此程序集中查找映射作为嵌入资源。