泛型ADO.NHibernate异常

泛型ADO.NHibernate异常,hibernate,nhibernate,Hibernate,Nhibernate,我有这张桌子: 表格集:[PK:IdSet int、IdProject int、IdSetStateint、IdPriorityint、NumSetint、UNINTCHAR、NumDiscint] 因此,我对NUnit进行了测试,以便在此表中插入一个值。这是我的测试方法: [Test] public void Can_add_Set() { var set = new Set { IdProject = 2, IdSetState = 2, NumDisc = 1, IdPrior

我有这张桌子:

表格集:[PK:IdSet int、IdProject int、IdSetStateint、IdPriorityint、NumSetint、UNINTCHAR、NumDiscint]

因此,我对NUnit进行了测试,以便在此表中插入一个值。这是我的测试方法:

[Test]
public void Can_add_Set()
{
      var set = new Set { IdProject = 2, IdSetState = 2, NumDisc = 1, IdPriority = 3, NumSet = 100};
      setRepository.AddSet(set);
 }
这是我的插入方法:

public void AddSet(Set set) 
    {
        using (ISession session = NHibernateSessionBuilder.OpenSession())
        using (ITransaction transaction = session.BeginTransaction())
        {
            session.Save(set);
            transaction.Commit();
        }
    }
这是Set.hbm.xml:

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

  <class name="Set">
    <id name="IdSet">
      <generator class="identity"/>
    </id>
    <property name="IdProject" />
    <property name="IdSetState" />
    <property name="IdPriority" />
    <property name="Unit" />
    <property name="NumDisc" />
    <property name="NumSet" />
  </class>

</hibernate-mapping> 
当session.saveset时;显示此错误的:

泛型ADO.Exception


无法加载实体:[AdminProject.Business.entity.Set5][SQL:选择set0\u0.IdSet作为IdSet2\u 0\u0,set0\u0.IdProject作为IdProject2\u 0\u0,set0\u0.IdSetState作为IdSetState2\u 0\u0.IdPriority作为IdPriority 2\u 0\u0,set0\u0.Unit作为Unit2\u 0\u0,set0\u0.NumDisc作为NumDisc2\u 0\u0,set0\u0.NumSet作为NumSet作为NumSet\u0\u0\u0,其中set0=]当NHibernate抛出这样的异常时,它包括ADO提供程序抛出的内部异常,99%的情况下,它会准确地说出失败的SQL语句的错误。内部异常更有帮助;NH只是将其封装在更通用的东西中,这样您就可以捕获通用异常,而不是NH用于传输SQL的实际ADO.NET层抛出的所有可能的特定于提供程序的异常

从您所展示的内容来看,我的第一个怀疑是DB中的列的命名与您的属性不完全相同,并且您没有在映射中指定不同的列名。如果只指定属性,则根据DB的排序规则,属性和列名必须是匹配的,这基本上意味着唯一可能的差异可能是大小写,并且仅在不区分大小写的DB中


另一件与错误无关的事情是:AddSet函数不允许外部事务控制,因为每个操作不仅仅是它自己的事务,而是它自己的会话。这通常是一个坏主意,因为如果必须同时添加集合1和集合2,则插入集合1,然后集合2失败,集合1仍将在数据库中。通常,您必须能够告诉NHibernate,通过允许代码获取一些事务或UnitOfWork引用,它可以将这些引用传递到各种存储库方法中,以标识事务上下文,多个操作应该是全部或全无。

是的,事实上我已经插入到其他表中!!尝试在类元素中指定表。