【问题标题】:Invalid index N for this SqlParameterCollection with Count=N only when associated table has null record仅当关联表具有空记录时,此 SqlParameterCollection 的索引 N 无效,Count=N
【发布时间】:2011-10-01 01:44:39
【问题描述】:

我有一个相当复杂的实体,当特定的数据库表缺少记录时,它不会保存。当记录存在时,实体会正确保存。当记录没有收到异常时:

此 SqlParameterCollection 的索引 N 无效,Count=N

在阅读了通过 Google 找到的一堆解决方案以及 Stack Overflow 上最密切相关的问题后:

我认为我的问题与我设置映射文件的方式有关。 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


    【解决方案1】:

    虽然 Scott 从 Customer 类中删除 snl_id 属性的解决方案解决了这个问题,但它会导致我无法解决的问题——即使没有相应的 Person 表记录,snl_id 也可以存在于 Customer 表中。既然是这种情况,当我无法通过关联的 Person 属性访问 snl_id 时,有时我需要访问它。

    我考虑了几种替代解决方案,但最终决定创建 Customer 表的视图,包括 Customer 表的主键和 来自 customer 表的 snl_id。然后通过连接将该属性映射到视图。

    Join("v_cust_id_snl_id", j => j.KeyColumn("cust_id").Map(x => x.SnlId, "snl_id")
    

    这个改变让我可以吃蛋糕。我能够保留客户的 SnlId 属性,但在保存时不再抛出异常。

    【讨论】:

      【解决方案2】:

      您是否将 snl_id 作为 Customer 中的属性引用以及作为子对象的主键?如果是这样,这将导致您收到错误。从 Customer 中移除属性并使用 Person 获取值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 2013-12-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多