我有一個相當複雜的實體,它在特定數據庫表缺少記錄時不會保存。當記錄存在時,實體保存正確。當記錄不我收到異常:僅當關聯表具有空記錄時,此SqlParameterCollection的Count = N的索引N無效
無效索引N此SqlParameterCollection以計數= N
讀了一堆通過谷歌找到解決方案,並在堆棧溢出最密切相關的問題後, :
- What's causing 「Invalid index nn for this SqlParameterCollection with Count=nn」 when a column is Null in the database?
- Invalid Index n for this SqlParameterCollection with Count=n」 OR 「foreign key cannot be null
我相信我的問題與我的映射文件設置的方式有關。客戶實體參照Person實體。人員映射到我們已閱讀的表格,但不能寫入訪問。當Person實體的記錄不存在時,我會生成異常。如果記錄不存在問題。我已將客戶的人員參考設置爲Nullable()
。我也進行了雙重檢查,以確保沒有兩個實體映射的屬性。
這是我的感覺是相關的映射信息,但可以提供更多的需要:
客戶
//more mapping code...
References(x => x.Person, "snl_id").Nullable();
//more mapping code...
人
//more mapping code...
ReadOnly();
Id(x => x.SnlId).Column("SNL_ID");
//more mapping code...
爲了進一步使問題複雜化我們有一些令人痛苦的代碼讓NHibernate在Person中執行的更好不存在。我不確定它適用於此,但認爲它足夠適用於我的問題。我們使用下面的代碼,因爲沒有它,NHibernate JIRA將創建大量的查詢。該解決方案在此Stack Overflow answer中概述。
客戶的人財物
public virtual Person Person
{
get
{
try
{
var snlId = per.Name;
return per;
}
catch
{
return null;
}
}
set
{
per = value;
}
}
private EPerson per;
什麼我在我的映射丟失,將導致此異常?我還沒有看到另一個這個問題嗎?