# entityframework 部分欄位更新 與 部分欄位不更新 ###### tags: `程式設計` ## 範例程式碼 先附上完整範例 ```=C# public ActionResult Edit(Models.ModelClass postback) { if (ModelState.IsValid) //判斷資料輸入是否正確 { //部分欄位從後台更新 postback.UpdateTime = DateTime.Now; //大多數欄位從post資料更新 db.Entry(postback).State = EntityState.Modified; // 部分欄位不更新 var excluded = new[] { "CreateTime","Other" }; var entry = db.Entry(postback); entry.Property("CreateTime").IsModified = false; db.SaveChanges(); return View(); } ``` ## 部分欄位不更新 採用迴圈方式執行 ``` var excluded = new[] { "Column1","Column2" }; var entry = db.Entry(postback); foreach (var name in excluded) { entry.Property(name).IsModified = false; } ``` ## .Add() 和 .Attach() 的差別 .Add() 不會立刻更新到資料庫,要等到執行 .SaveChanges() 的時候才會更新。 .Attach() 會立刻更新到資料庫。 ## 參考資料 * Entity Framework - 為什麼修改的資料不用Attach http://blog.sanc.idv.tw/2014/08/entity-framework-attach.html * ASP.NET WEB API 2:安全的PATCH方法的三種實作 https://blog.kkbruce.net/2014/05/aspnet-webapi-2-security-PATCH-method-3-implement-ways.html#.YFlhkK8zZPY * Entity Framework validation with partial updates https://stackoverflow.com/questions/12871892/entity-framework-validation-with-partial-updates * EntityFramework update partial model https://stackoverflow.com/questions/9820540/entityframework-update-partial-model/9821029#9821029 * How to update not every fields of an object using Entity Framework and EntityState.Modified https://stackoverflow.com/questions/10257360/how-to-update-not-every-fields-of-an-object-using-entity-framework-and-entitysta * DbSetMigrationsExtensions.AddOrUpdate 方法 https://docs.microsoft.com/zh-tw/dotnet/api/system.data.entity.migrations.dbsetmigrationsextensions.addorupdate?view=entity-framework-6.2.0