【问题标题】:Entity framework multiple row update实体框架多行更新
【发布时间】:2016-12-01 10:00:22
【问题描述】:

我想知道是否有更智能/更快/one_line 的方法来解决这个问题。

我有一个带有IsActive 属性的dll 列表。在 UI 上,我有一些复选框,它们根据复选框是否被选中来改变 dll 的状态。更改发生在按钮单击时。我遍历整个数据库没有问题,所以现在我这样做:

foreach (var item in dllList)
{
    context.dllSet.Find(item.Id).IsActive = item.IsActive;
}

dllList 是连接到 WPF 前端的 List<> 元素)。

所以现在我在 DB 中找到具有相同 id 的元素,并将其状态更改为 UI 复选框中显示的状态。

我想要的解决方案是这样的:

context.dllSet.AddOrUpdateList(dllList);

【问题讨论】:

  • 怎么样:context.dllSet.Where(a=>dllList.Contains(a.Id)).ToList().ForEach(a=>a.IsActive = dllList.Find(a.Id ).IsActive);
  • 不像我想象的那么优雅......但只需少量修改 :)
  • 这取决于您在 DB 和 UI 之间传输数据的方式。假设您将可见列表直接绑定到数据库条目列表并保持上下文活动,那么结果就像在单击时调用 SaveChanges 一样简单。如果您以一种聪明的方式设计您的点击处理程序,您将知道哪个条目已更改,并且您不必更新整个列表。如果您的dllList 包含与dllSet 相同的实体类型,则可以将项目附加到新上下文并将IsActive 标记为已修改,如Vladimir 提供的链接中所示。你有很多选择,但不要提供很多信息

标签: c# wpf entity-framework


【解决方案1】:

数据表为参数创建存储过程,并在DB端实现逻辑。

从实体框架调用您的存储过程。

【讨论】:

    猜你喜欢
    • 2014-03-31
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多