gpt4 book ai didi

.net - Nhibernate更新问题-参数索引超出范围

转载 作者:行者123 更新时间:2023-12-03 03:18:29 25 4
gpt4 key购买 nike

我在将数据更新到数据库时遇到问题。我有一个简单的多对一产品-组关系:

    public class GroupInfoMapping : ClassMap<GroupInfo>
{
public GroupInfoMapping()
{
Table("`group`");
Schema("tempdb");
Id(x => x.Id)
.GeneratedBy.Native();
OptimisticLock.Version();
Map(x => x.GroupName);
Map(x => x.ParentId);
HasMany(x => x.Products)
.KeyColumn("GroupId")
.Inverse()
.Fetch.Select()
.AsSet();
//HasMany(x => x.Children)
// .KeyColumn("Id")
// .Inverse()
// .Fetch.Select()
// .Cascade.None()
// .AsSet();
//References(x => x.Parent)
// .Class(typeof(GroupInfo))
// .Column("ParentId")
// .Fetch.Select();

}
}

public class ProductInfoMapping : ClassMap<ProductInfo>
{
public ProductInfoMapping()
{
Table("`product`");
Schema("tempdb");
Id(x => x.Id)
.GeneratedBy.Native();
OptimisticLock.Version();
Map(x => x.GroupId);
Map(x => x.ProductName);
References(x => x.Group)
.Class(typeof(GroupInfo))
.Column("GroupId")
.Fetch.Select();
}
}


如果仅更改产品数据,则没有任何区别,它将不允许我进行以下异常更新:
参数索引超出范围。

如果我将Not.Update()添加到产品映射中以供组参考,则我可以更新产品数据(但组仍未被引用)。

我正在使用MySql数据库,并且每个演示者正在使用一个会话。为什么我不能同时更新实体及其参考?我已经注释掉了部分自引用组,因为这在仅更新组时也会产生问题。

谢谢,
戈兰

最佳答案

在ProductInfoMapping类中,您两次映射同一列:

Map(x => x.GroupId);




References(x => x.Group)
.Class(typeof(GroupInfo))
.Column("GroupId")
.Fetch.Select();


不需要组ID的Map,因为您无需使用该属性即可访问Group属性的ID:

var groupId = someProdInfoObj.Group.Id;


更新:

如果仍然希望有一个GroupId属性,可以访问Group的ID,而不是直接在Group对象上访问它,则可以像这样修改该属性(示例是具有Guid类型的ID):

public virtual Guid? GroupId
{
get { return Group != null ? Group.Id : null; }
set { }
}

关于.net - Nhibernate更新问题-参数索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com