错误的映射NHibernate 3.3

时间:2013-02-24 11:28:12

标签: c# asp.net asp.net-mvc nhibernate

您知道映射文件的问题在哪里吗?

Eroor: 无法编译映射文档:NHibernateTutorial.Mapping.Character.hbm.xml

我添加了所有文件。

字符

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NHibernateTutorial.Domain
{
    public class Character
    {
        public virtual Guid Id { get; set; }
        public virtual string Name { get; set; }
        public virtual int HealthPoints { get; set; }
        public virtual int Mana { get; set; }
        public virtual string Profession { get; set; }
    }
}

映射( Character.hbm.xml

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

  <class name="Character">
    <id name="Id">
      <generator class="guid" />
    </id>
    <property name="Name" />
    <property name="HealthPoints" />
    <property name="Mana" />
    <property name="Profession" />
  </class>

</hibernate-mapping>

错误

enter image description here

的ConnectionString

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Data Source=RAFAL-KOMPUTER\MSSQLSERVER4;Database=rafal;Trusted_Connection=True;</property>
  </session-factory>
</hibernate-configuration>

NHibernateHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using NHibernateTutorial.Domain;

namespace NHibernateTutorial
{
    public class NHibernateHelper
    {
        private static ISessionFactory _sessionFactory;

        private static ISessionFactory SessionFactory
        {
            get
            {
                if (_sessionFactory == null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();
                    configuration.AddAssembly(typeof(Character).Assembly);
                    _sessionFactory = configuration.BuildSessionFactory();
                }
                return _sessionFactory;
            }
        }

        public static ISession OpenSession()
        {
            return SessionFactory.OpenSession();
        }

    }
}

角色存储库

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernateTutorial.Domain;
using NHibernate;

namespace NHibernateTutorial
{
    public class CharacterRepository
    {
        public void Add(Character newCharacter)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(newCharacter);
                    transaction.Commit();
                }
            }
        }

        public Character GetCharacterByName(string name)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                var result = session.QueryOver<Character>().Where(x => x.Name == name).SingleOrDefault();
                return result ?? new Character();
            }
        }

        public void Update(Character newCharacter)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Update(newCharacter);
                    transaction.Commit();
                }
            }
        }

        public void Delete(Character newCharacter)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Delete(newCharacter);
                    transaction.Commit();
                }
            }
        }

    }
}

异常详细信息: enter image description here

2 个答案:

答案 0 :(得分:4)

查看您的例外情况:

  

无法实例化方言类   NHibernate.Dialect.MsSql2012Dialect [...]

您的问题不在于映射,而在于您如何指定数据库服务器技术(RDBMS)方言。这可能是因为各种原因:

  • 您正在尝试使用下载的NHibernate版本中不存在的方言:您是否拥有最新版本(3.0,3.1,3.2,3.3 ......?)。 < / p>

  • 您在错误的地方或以错误的方式指定方言。

仔细检查您的配置以及是否有最新版本的NHibernate!

答案 1 :(得分:2)

您是否已将映射文件Character.hbm.xml标记为VS?

属性中的嵌入资源