gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:18:28 24 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 数据库,并且每个演示者使用一个 session 。为什么我无法同时更新实体及其引用?我已经注释掉了自引用组的部分,因为这在仅更新组时也会产生问题。

谢谢,戈兰

最佳答案

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

Map(x => x.GroupId);

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

不需要组 ID 的映射,因为您可以在没有它的情况下访问组属性的 ID:

var groupId = someProdInfoObj.Group.Id;

更新:

如果您仍然希望有一个 GroupId 属性,您可以访问组的 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/

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