2017-06-05 6 views
0

ORMプログラムを実行しようとすると、このエラーメッセージが表示されます。値を挿入するときのSCOPE_IDENTITY

NHibernate.Exceptions.GenericADOExceptionは:「挿入できませんでした: [NHibernateWinFormsApp.Employee] [SQL:INSERT INTO従業員DEFAULT VALUES を。選択SCOPE_IDENTITY()]」

これは私のマッピングファイルEDITある

<?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

[選択したSCOPE \ _IDENTITY()を流暢にnhibernate 1から多数]を挿入できませんでした(https://stackoverflow.com/questions/25096975/could-not-insert-select-scope-identity-fluent-nhibernate -one-to-many) –

+0

@ahmedab​​delqader私が同意できるかどうかわかりません。私が間違っているかどうか教えてください。 :) – user7879148

+0

これは完全なエラーメッセージですか?私には、それは切り詰めて見えます。 SQL Serverはもっと情報を伝える必要があります。内部例外を検査し、 'SqlException'を探し、' Errors'プロパティを調べます。それ以外の場合は、失敗した挿入SQLをキャプチャし、直接データベース上で再生します。 –

答えて

1

2つのレコード間で値が異なる必要がある列をマップしていないようです。したがって、それらは常にnullと挿入されますが、そのような従業員を1人しか持てないため、他のすべての挿入が失敗します。

制限を解除するか(フィルタリングされた一意のインデックスをnullの値に置き換えて)リラックスしたり、これらの列をいくつかのプロパティにマップして、各従業員に一意の値を与えます。

問題の要点は、常にInnerExceptionとその特定のプロパティ(存在する場合)をすべて調べてください。それはNHibernate固有のアドバイスではありません、あなたは遭遇するすべての例外でそれを行う必要があります。

+0

はい、問題はマッピングファイルにあると思います。私はそれを探し、brb。ありがとう、フレデリック。 – user7879148

+0

こんにちは、フレデリック。マッピングファイルを変更しました(上記の私のEDITを参照してください)。この外部キー(FKCE90096CDE039EE9:EmployeeDepartment [DepartmentId]))は、参照される主キー(Department [DepartmentId、DepartmentName])と同じ列数を持つ必要があります。多対多マッピングの原則をよく理解しているかどうかはわかりません。私の無知を許してください:) – user7879148

+0

@ user7879148質問を別のものに変換しないでください。新しいものを求めてください。 –

関連する問題