簡體   English   中英

使用實體框架僅選擇一些列,然后保存回數據庫

[英]Using Entity Framework to Select Only Some Columns and then Saving Back to the Database

我想使用實體框架更新數據庫中的序列(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

實體框架如何處理這樣的修改和保存部分實體?

有誰知道微軟在某處是否記錄了這種情況? 有人對您會告訴我的事情了解得足夠多嗎?

您可以從匿名類型創建存根實體,並將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();

其中dbDbContext

您可能必須先禁用驗證,因為存根可能沒有所有必需的屬性:

db.Configuration.ValidateOnSaveEnabled = false;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM