2017-06-05 91 views
0

嘗試執行我的ORM程序時收到此錯誤消息。SCOPE_IDENTITY插入值時

NHibernate.Exceptions.GenericADOException:「無法插入: [NHibernateWinFormsApp.Employee] [SQL:INSERT INTO員工DEFAULT VALUES;選擇SCOPE_IDENTITY()」

這是我的映射文件編輯

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

    <class name="Employee"> 
    <id name="EmployeeId" column="EmployeeId"> 
     <column name="EmployeeId" not-null="true" /> 
     <column name="FirstName" /> 
     <column name="LastName" /> 
     <generator class="native"/> 
    </id> 

    <bag name="Department" table="EmployeeDepartment" > 
     <key column="EmployeeId" not-null="true" /> 
     <many-to-many class="Department" column="DepartmentId"/> 
    </bag> 
    </class> 

    <class name="Department"> 
    <id name="DepartmentId"> 
     <column name="DepartmentId" not-null="true" /> 
     <column name="DepartmentName" /> 
     <generator class="native"/> 
    </id> 

    <bag name="Employee" table="EmployeeDepartment" inverse="true"> 
     <key column="DepartmentId" not-null="true"/> 
     <many-to-many class="Employee" column="EmployeeId"/> 
    </bag> 
    <property name="DepartmentName" type="string"/> 
    </class> 

</hibernate-mapping> 

而且,到我的會議:

DepartmentRepository departmentRepository = new DepartmentRepository(session); 

// get department by id 
Department department = departmentRepository.GetById(int.Parse(textDepartment.Text)); 
employeeData.Department = new List<Department>(); 
employeeData.Department.Add(department); 
department.Employee.Add(employeeData); 

有誰知道如何解決這個小問題?

+0

可能重複[無法插入選擇範圍\ _IDENTITY()流利nhibernate一對多](https://stackoverflow.com/questions/25096975/could-not-insert-select-scope-identity-fluent-nhibernate一對多) –

+0

@ahmedab​​delqader我不確定我是否同意。請告訴我,如果我錯了。 :) – user7879148

+0

這是完整的錯誤信息?對我來說,它看起來被截斷了。 SQL-Server應該告訴更多。檢查內部異常,尋求'SqlException'並查閱他們的'Errors'屬性。否則捕獲失敗的插入SQL並直接在你的數據庫上重放它。 –

回答

1

看起來好像您還沒有映射某些列必須在兩條記錄之間有不同的值。所以他們總是插入null,但你只能有一個這樣的員工,導致所有其他插入失敗。

要麼刪除該約束,要麼放鬆它(通過將其替換爲忽略null值的已過濾的唯一索引),或者將這些列映射到某些屬性併爲每個員工分配唯一值。

但是,你的問題的底線是:總是諮詢所有InnerException及其特定的屬性,如果有的話。這不是一個NHibernate的具體建議,你應該這樣做,你遇到的所有異常。

+0

是的,我認爲問題是在映射文件。我會尋找它,並brb。謝謝你,@Frédéric。 – user7879148

+0

你好,@Frédéric。我更改了映射文件(請參閱上面的編輯)。我收到了這條消息'外鍵(FKCE90096CDE039EE9:EmployeeDepartment [DepartmentId]))必須與引用的主鍵(Department [DepartmentId,DepartmentName])具有相同的列數''。我不確定我是否理解了多對多映射的原理。請原諒我的無知:) – user7879148

+0

@ user7879148不要將問題轉化爲另一個問題。問一個新的。 –

相關問題