Bra*_*ram 7 c# entity-framework-core asp.net-core
我正在编写一个应用程序,它从外部 API 提取数据并使用实体框架将其存储到我的 SQL Server 数据库中。我每天从这个 API 中提取数据,因此如果一行已经存在,记录将被更新,否则将创建一条新记录。这是通过检查 Id 来完成的。
现在我遇到的问题是我只想 EF 更新BranchId和CustomerNameTopdesk。该CustomerNamePRTG值是我自己手动添加到数据库中的。因此,现在当记录更新时,它会设置回 NULL,并且我手动插入的值将丢失。
更新前
更新后
来自 API 的数据从 JSON 反序列化并data作为 a 存储在变量中List<Customers>.。我使用以下代码来检查 Id 记录是否已存在并更新它,否则创建一个新记录。正如您所看到的,它当前正在更新整个Customer记录,包括CustomerNamePRTGNULL 的记录
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();
}
Run Code Online (Sandbox Code Playgroud)
模型
public class Customers
{
[Key]
[JsonProperty("id")]
public string BranchId { get; set; }
[JsonProperty("name")]
public string CustomerNameTopdesk { get; set; }
public string CustomerNamePRTG { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
数据库上下文
public DbSet<Customers> Customers { get; set; }
Run Code Online (Sandbox Code Playgroud)
您必须更新 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();
}
Run Code Online (Sandbox Code Playgroud)
您应该只能为单个字段分配值。
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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14457 次 |
| 最近记录: |