[英]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.