簡體   English   中英

如何僅更新實體框架(核心)中的特定字段

[英]How to only update specific fields in Entity Framework (Core)

我正在編寫一個應用程序,它從外部 API 提取數據,並使用實體框架將其存儲到我的 SQL 服務器數據庫中。 我每天都從這個 API 中提取數據,所以如果一行已經存在,則將更新記錄,否則將創建一個新記錄。 這是通過檢查 Id 來完成的。

現在我遇到的問題是我只希望 EF 更新BranchIdCustomerNameTopdesk 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.

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