Far*_*rai 1 c# sql nhibernate asp.net-mvc
NHibernate 错误消息此 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();
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public ActionResult SaveChannelProperty(string NewProp, string ChannelName)
{
client.CreateKazangChannelAttribute(new KazangChannelAttr
{
KazangChannelId = ChannelObject.Id,
AttrName = NewProp,
AttrValue = NewProp,
AttrType = ""
});
}
Run Code Online (Sandbox Code Playgroud)
这种异常几乎总是与“双重”映射有关。因为从问题中显示的片段来看并不容易显示,我会这样解释:
让我们有一个实体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; }
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们将指示 NHibernate为两个属性使用一列- 这将不起作用:
public KazangAccountClassMap()
{
...
References(x => x.Channel)
.Column("Channel_ID"); // the Channel reference
Map(x => x.ChannelId)
.Column("Channel_ID"); // the int property ChannleId
Run Code Online (Sandbox Code Playgroud)
该映射适用于任何 READ 操作...列将被使用两次。但是对于 WRITE 操作,我们将为列创建参数,为列创建Channel_ID另一个参数Channel_ID== 只会创建其中一个。虽然 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"
;
Run Code Online (Sandbox Code Playgroud)
现在,NHibernate 将只为这一列创建/期望一个列/sqlParamter...
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |