NHibernate の多対 1 の関係で、null 以外のプロパティが null または一時的な値を参照しているというエラーが発生します。
コード:
class MyData
{
public string Name{get;set;}
public virtual UploadData UploadData { get; set; }
public int UploadId{get;set;}
}
class UploadData
{
public int UploadId{get;set;}
public DateTime Date{get;set;}
}
マッピング
<class name="MyData, NS" table="MyData" lazy="false">
<id name="Identifier" type="Int32" unsaved-value="0">
<column name="Identifier" sql-type="int"
not-null="true" unique="true" index="PK_dbo.MyData"/>
<generator class="identity" />
</id>
<property name='Name' column='Name'/>
<property name='UploadId' column='UploadId'/>
<many-to-one name="UploadData" class="UploadData, NS">
<column name="UploadId" length="5" sql-type="int" not-null="true" index="UploadId"/>
</many-to-one>
</class>
UploadData クラス
<class name="UploadData, NS" table="UploadData" lazy="false">
<id name="UploadId" type="Int32" unsaved-value="0">
<column name="UploadId" sql-type="int"
not-null="true" unique="true" index="PK_dbo.UploadData"/>
<generator class="identity" />
</id>
<property name='Data' column='Date' />
</class>
以下のコードを使用してレコードを削除しています。
foreach(MyData obj in myDataCollection)
repo.Delete(obj) // delete using repository.
repo.Delete(obj.UploadData)
myDataCollection に同じ UploadData を持つ 2 つのインスタンスが含まれている場合、「null でないプロパティが null または一時的な値を参照しています」というエラーが表示されます。repo.Delete(obj)
問題をググって解決策を見つけました (例: マッピングで not-null="false" にする) が、問題は解決しませんでした。