NHibernate ERROR消息 此SqlParameterCollection的索引4无效,Count = 4。
我的映射:
public KazangAccountClassMap()
{
Table("KazangAccount");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Channel).Not.Nullable();
Map(x => x.UserName).Not.Nullable();
Map(x => x.Password).Not.Nullable();
HasMany<KazangMerchant>(x => x.KazangMerchants)
.KeyColumn("AccountId")
.Inverse();
}
控制器:
public ActionResult SaveChannelProperty(string NewProp, string ChannelName)
{
client.CreateKazangChannelAttribute(new KazangChannelAttr
{
KazangChannelId = ChannelObject.Id,
AttrName = NewProp,
AttrValue = NewProp,
AttrType = ""
});
}
答案 0 :(得分:4)
这种异常几乎总是与“doubled”映射有关。因为从问题中显示的片段不容易显示,我会这样解释:
我们有一个实体KazangAccount
,该实体引用Channel
以及该对象的 int
表示为ChannelId
public class KazangAccount
{
public virtual int Id { get; set; }
...
public virtual Channel Channel { get; set; }
public virtual int ChannelId { get; set; }
}
在这种情况下,我们会将NHibernate用于 ONE列用于两个属性 - 并且这样做不会起作用:
public KazangAccountClassMap()
{
...
References(x => x.Channel)
.Column("Channel_ID"); // the Channel reference
Map(x => x.ChannelId)
.Column("Channel_ID"); // the int property ChannleId
该映射适用于任何READ操作...列将被使用两次。但是对于WRITE操作,我们将为列Channel_ID
创建参数,为列Channel_ID
创建另一个参数} ==将只创建其中一个。虽然NHibernate期望一些params - 但有一个缺失。
解决方案? 制作其中一个只读
public KazangAccountClassMap()
{
...
References(x => x.Channel)
.Column("Channel_ID"); // READ and WRITE
Map(x => x.ChannelId)
.Column("Channel_ID") // just READ
.ReadOnly() // insert="false" update="false"
;
现在,NHibernate将为此列创建/期望只有一个列/ sqlParamter ...