【发布时间】:2011-10-01 01:44:39
【问题描述】:
我有一个相当复杂的实体,当特定的数据库表缺少记录时,它不会保存。当记录存在时,实体会正确保存。当记录没有收到异常时:
此 SqlParameterCollection 的索引 N 无效,Count=N
在阅读了通过 Google 找到的一堆解决方案以及 Stack Overflow 上最密切相关的问题后:
- 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
我认为我的问题与我设置映射文件的方式有关。 Customer 实体引用了 Person 实体。 Person 映射到我们已经读取但没有写入权限的表。当 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;
我的映射中缺少什么会导致此异常?这个问题还有其他我没有看到的吗?
【问题讨论】:
标签: nhibernate fluent-nhibernate fluent-nhibernate-mapping