【问题标题】:Invalid index n for this SqlParameterCollection with Count=m此 SqlParameterCollection 的索引 n 无效,Count=m
【发布时间】:2011-04-25 21:20:40
【问题描述】:

当我尝试保存一个类时,我在 Castle Active Record(围绕 NHibernate)中遇到了这个令人讨厌的错误:

此 SqlParameterCollection 的索引 n 无效,Count=m

我知道这个错误是由一个属性在一个类中被多次映射引起的,但是我不知道如何解决它。我有两个子类,它们都使用同一列 (IpAddressNumber) 映射回相关类。另外 IpAddressNumber 是类的主键,这导致 NHibernate 尝试映射 IpAddressNumber 属性三次(只是猜测。)

这是课程:

[ActiveRecord(Lazy=true)]
    public class DeviceConfiguration : UsersDatabase<DeviceConfiguration>
    {
        [PrimaryKey]
        public virtual long IPAddressNumber { get; set; }

        [BelongsTo("IPAddressNumber", Lazy = FetchWhen.OnInvoke)]
        public virtual Vehicle Vehicle { get; set; }

        [BelongsTo("IPAddressNumber", Lazy = FetchWhen.OnInvoke)]
        public virtual JBusConfiguration JBusConfiguration { get; set; }
}

任何帮助将不胜感激...

【问题讨论】:

  • 这看起来像是一个数据库设计问题...您是在使用一个表来存储 IP 吗?
  • 不,我删除了 DeviceConfiguration 的其他属性只是为了显示相关的关联。拥有 2 个子表,它们都根据其 PK 引用父表,这对我来说似乎不是数据库设计问题......
  • 如果这是直接 NHibernate,这将使用 配置,您在父表和子表之间有 1:1 的关系,对吧?唯一的问题是 ActiveRecord 如何支持 1:1 关系。
  • BelongsTo 用于 1:1 关系。

标签: nhibernate activerecord castle-activerecord


【解决方案1】:

我最终不得不完全删除第二个关联来解决这个问题。不是一个很好的解决方案,但我能找到的唯一一个。

【讨论】:

  • 这确实不是一个好的解决方案。我遇到了同样的问题,这是 NHibernate 3 的新问题,因为自 NHibernate 2 的早期版本以来我就有相同的映射,并且在最近升级到 NHibernate 3 之前不需要更改它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多