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

标签 .net nhibernate c#-4.0 fluent-nhibernate

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

    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/

相关文章:

c# - Fluent NHibernate 中的 schemaExport 是什么?

mysql - NHibernate:按 ID 集合排序结果

sql - 如何在 LINQ to Entity Framework 中使用 SQL 通配符

c# - 使用 MS Exchange 2007 编程

c# - PowerShell 和 $null 作为方法参数

c# - Linq Left Outer Join With latest datetime 在右侧

.net - OCR 文档扫描 .NET SDK

c# - 我怎么知道进程是否正在运行?

NHibernate 多对多 - 如何从连接表中检索属性并将其与 child 关联?

c# - 如何使用 C# 或 SQL 将两列合并为一列