[英]How to only update specific fields in Entity Framework (Core)
我正在編寫一個應用程序,它從外部 API 提取數據,並使用實體框架將其存儲到我的 SQL 服務器數據庫中。 我每天都從這個 API 中提取數據,所以如果一行已經存在,則將更新記錄,否則將創建一個新記錄。 這是通過檢查 Id 來完成的。
現在我遇到的問題是我只希望 EF 更新BranchId
和CustomerNameTopdesk
。 CustomerNamePRTG
值是我自己手動添加到數據庫中的。 所以現在當記錄更新時,它被設置回 NULL 並且我手動插入的值將丟失。
更新前
更新后
API 中的數據從 JSON 反序列化,並作為List<Customers>.
存儲在data
變量中。 我正在使用以下代碼檢查 Id 是否已經存在記錄並更新它,否則創建一個新記錄。 如您所見,它當前正在更新整個Customer
記錄,包括CustomerNamePRTG
,即 NULL
string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Customers>>(apiResponse);
foreach (Customers customer in data)
{
if (db.Customers.Any(x => x.BranchId == customer.BranchId))
{
db.Customers.Update(customer);
}
else
{
db.Customers.Add(customer);
}
db.SaveChanges();
}
Model
public class Customers
{
[Key]
[JsonProperty("id")]
public string BranchId { get; set; }
[JsonProperty("name")]
public string CustomerNameTopdesk { get; set; }
public string CustomerNamePRTG { get; set; }
}
數據庫上下文
public DbSet<Customers> Customers { get; set; }
您必須更新 EF 返回的實體。
string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Customers>>(apiResponse);
foreach (Customers customer in data)
{
var current = db.Customers.Find(customer.BranchId);
if (current != null)
{
db.Entry(current).CurrentValues.SetValues(customer);
}
else
{
db.Customers.Add(customer);
}
db.SaveChanges();
}
您應該只能將值分配給單個字段。
string apiResponse = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<Customers>>(apiResponse);
foreach (Customers customer in data)
{
var record = db.Customers.Find(customer.BranchId);
if (record != null)
{
record.BranchId = customer.BranchId;
// as many fields as you need
db.Customers.Update(record );
}
else
{
db.Customers.Add(customer);
}
db.SaveChanges();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.