使用实体框架仅选择某些列,然后保存回数据库

本文关键字:然后 保存 数据库 实体 框架 选择 | 更新日期: 2023-09-27 17:55:53

我想使用实体框架更新数据库中的序列(SortOrder)列。

似乎最简单的方法是为集合中的每个项目加载 SortOrder,根据需要更新 SortOrder,然后将行保存回数据库。

当然,如果我不需要检索要更新的行中的每一列,这将更有效。我难以理解的是,如果我只选择一些列,对这些列进行更改,然后将其保存回来会发生什么。

var x = from o in Package.PackageProducts
        orderby o.SortOrder
        select new { o.Id, o.SortOrder };
// Modify SortOrder in this collection x
// Save x back to the database
实体

框架如何处理修改和保存这样的部分实体?

有谁知道Microsoft是否在某处记录了在这种情况下会发生什么?有谁知道发生了什么,你可以告诉我吗?

使用实体框架仅选择某些列,然后保存回数据库

您可以从匿名类型创建存根实体,并将SortOrder标记为已修改:

var x = (from o in Package.PackageProducts
        orderby o.SortOrder
        select new { o.Id, o.SortOrder }).ToList();
// Modify SortOrder in this collection x
...
// Save x back to the database
foreach(y in x)
{
    var p = new PackageProduct { Id = y.Id, SortOrder = y.SortOrder }); // stub
    db.PackageProducts.Attach(p);
    db.Entry(p).Property(p1 => p1.SortOrder).Modified = true;
}
db.SaveChanges();

db在哪里是DbContext.

您可能必须先禁用验证,因为存根可能没有所有必需的属性:

db.Configuration.ValidateOnSaveEnabled = false;