NHibernate错误消息无效索引4对此SqlParameterCollection与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 = ""
});
}发布于 2015-01-12 13:28:37
这种异常几乎总是与“加倍”映射有关。因为从问题中所显示的片段来看,很难显示出来,我会这样解释:
让我们有一个实体KazangAccount,它引用Channel,并将该对象的Channel表示为ChannelId
public class KazangAccount
{
public virtual int Id { get; set; }
...
public virtual Channel Channel { get; set; }
public virtual int ChannelId { get; set; }
}在这种情况下,我们需要构造NHibernate来使用ONE列来表示TWO properties --这是行不通的:
public KazangAccountClassMap()
{
...
References(x => x.Channel)
.Column("Channel_ID"); // the Channel reference
Map(x => x.ChannelId)
.Column("Channel_ID"); // the int property ChannleId这种映射对任何读取操作都是有益的..。列将被使用两次。但是对于写操作,我们将为列Channel_ID创建params,为列Channel_ID ==创建另一个params,只创建其中的一个。虽然NHibernate预计会有一些参数,但缺少一个。
解决方案?使这些只读之一
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.
https://stackoverflow.com/questions/27902712
复制相似问题