【问题标题】:EF4 - Add object to objectcontext without savechangesEF4 - 将对象添加到对象上下文而不进行保存更改
【发布时间】:2010-10-29 22:58:52
【问题描述】:

我有一个像 Order - Order lines 这样的页面。 Order 由一些 textboxes 和 ddls 表示,Order lines 由 GridView 表示。

我想让用户添加订单行而不保存对数据库的更改。例如:他添加了 4 个订单行,填写订单信息,然后点击保存按钮。只有在那一刻,所有信息都应该保存到数据库中。

当我使用类似的代码时

using (Entities ctx = new Entities())
{
 //create new OrderLine
 OrderLine ol = OrderLine.CreateOrderLine(1, 1, "", 1);
 //add OrderLine to OrderLines collection
 ctx.CreateOrderLines.AddObject(ol);
}

新创建的 OrderLine 没有出现在我的对象上下文中,因此我无法访问它并将 GridView 绑定到新的 OrderList 集合。

我该如何解决这个问题?或者也许还有其他方法可以执行此任务?

谢谢。

【问题讨论】:

    标签: asp.net entity-framework-4 savechanges objectcontext


    【解决方案1】:

    您可以尝试分离 Order 对象并使用它,直到您准备好将其保存回数据库。

    【讨论】:

    • 分离没有问题。问题出在 GridView 中。当我需要添加、删除和更新其中的行但没有即时保存时,我必须如何使用它。最后,点击保存按钮时,所有数据都应保存到数据库中。
    • 我通过创建较小版本的对象(只有我需要的属性)并将它们存储在会话中来完成类似的操作。您不想将整个 GridView 数据存储在会话中,但可能是一个轻量级对象。然后当用户提交时,您可以将值复制到您的 ObjectContext 并应用更改。
    • 我不明白在这种情况下应该如何使用 GridView。用户应该会看到在 Grid 中也添加了新添加的行。想象一下:用户从我的表单中添加了 4 行 => 有 4 个回发 => 向 GridView 添加了 4 个新行。但当时没有数据保存到数据库。比用户 delete 1 line from this 4 => 1 postbask => 1 row has been deleted from GridView(仍然是 3)。仍然没有保存数据。现在用户决定编辑 1 行 => 再次 1 回发 => 1 行在 GridView 中更新。最后用户点击保存按钮,所有更改/创建的数据都保存到数据库。
    • 您会将您的 GridView 数据绑定到会话对象,您将在每次添加/编辑/删除用户请求时对其进行更新。本质上,您是在第一次请求页面时使用 ObjectContext。您将从 EF 加载自定义轻量级对象,然后在与用户的剩余会话期间使用该对象。如果用户保存,您将您的值复制回 EF。如果用户不保存,那么您只需丢弃会话对象。
    • (添加到我之前的帖子)这是我创建全新订单时的场景。但可能是另一种情况:当我编辑现有订单时。例如。用户打开订单,已经有 3 行。他增加了 2 行 => 2 回发 => 2 行添加到 GV。没有保存数据。然后他从前 3 行中删除 1 行 => 1 回发 => 1 行已删除。没有保存数据(在数据库中仍然是 3 行)。比用户点击保存,所有更改都适用于数据库。我不问完整的解决方案,只是一些想法。我完全没有任何想法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2014-10-08
    相关资源
    最近更新 更多