【问题标题】:How to make CustomClass savechanges() working in Linq?如何使 CustomClass savechanges() 在 Linq 中工作?
【发布时间】:2011-09-26 14:21:54
【问题描述】:

我正试图让 Linq 继续使用 Northwind,但我真的迷路了..

我有一个名为 Ordr 的 CustomClass,其属性为 OrderID, EmployeeID, _ShipRegion

我做一个简单的查询:

        Dim query = From c In dbcontext.Orders _
                Where c.EmployeeID = 2
                Select New Ordr With { _
                    .OrderID = c.OrderID, _
                    .EmployeeID = c.EmployeeID, _
                    .Shipregion = c.ShipRegion}

然后我将此查询绑定到DataGridView:

DataGridView1.DataSource = query

现在,当我尝试使用 dbcontext.SaveChanges() 保存任何更改时,不会保存任何更改。 OrderID 是主键。

我应该如何在不失去保存更改的能力的情况下正确地做到这一点?

【问题讨论】:

    标签: vb.net linq entity-framework-4


    【解决方案1】:

    从外观上看,Entity 类可能被称为 Order,而 Ordr 只是一种数据传输对象。您需要将数据保存为 Order 对象。例如,当您返回保存时,您可能有一个更新的 Ordr 类,因此将其转换为 Order 类,您可能需要将其附加到上下文或基于 Id 获取现有 Order 然后更新它,然后保存语境。 希望这可以帮助。

    根据 cmets 进行编辑:

    例如,您可以这样做:

    var orders = from o in context.Orders 
    select new Order{Id = o.Id, EmployeeId = o.EmployeeId}; //etc. C#
    

    然后,当您要保存时,这是 Order 类型,因此您应该能够将其附加回上下文并保存。

    当您退回像 Ordr 这样重量较轻的对象时,我不确定您如何自动跟踪它,可能有某种方式,但我从未以这种方式使用它们。通常您将它们用于只读目的并加快查询速度。

    【讨论】:

    • 是的,Ordr 是一个新对象,其中包含原始表顺序中的一些但不是所有字段。
    • Microsoft 实现了一种机制来跟踪查询返回整个表(“select c”)时的更改,而不是当我检索一些文件时?这对我来说没有明显的原因。这就是为什么我认为我在这里做错了什么......
    • 我认为不完全是这样。在该代码 sn-p 中,您正在创建一个不是实体对象的新类型。您仍然可以在查询中创建一个新的 Order 对象,其中包含很少的选定属性并且应该是可跟踪的,也就是说,您应该能够将其附加到上下文并进行属性更改或一些类似的方法。
    • 我刚刚从微软找到了这个文档。引用:到目前为止,我们只研究了检索实体的查询,即与数据库表直接关联的对象。查询语言的美妙之处在于您可以以任何您想要的形式检索信息。当您这样做时,您将无法利用自动更改跟踪或身份管理。但是,您可以获得所需的数据。
    • 如果我误会了你,我该怎么办?
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多