簡體   English   中英

如何使用 EF Core 正確更新表中的列表數據

[英]How do I properly update the list data in my table using EF Core

我有兩個表CurrentItemCurrentItemDataPoints

CurrentItem表具有列數據,例如Id(pk), ItemId, Name, Price等,其中表CurrentItemDataPoints包含每個項目的 30 天數據點。

所以比如說..

itemId: 5, date, price
itemId: 5, date, price
itemId: 5, date, price
...

其中每一個都是CurrentItemDataPoints中的一行

itemIditemId相關,date 是日期,price 是價格。

現在我構建模型的方式是這樣的

public class CurrentItem
{
        public int itemId { get; set; }
        public string Name { get; set; }
        public string Icon { get; set; }

        public List<CurrentItemDataPoints> The30DayPoints { get; set; } = new List<The30DataPointsModel>();
}

和 CurrentItemDataPoints

public partial class CurrentItemDataPoints
{
        public int itemId { get; set; }
        public string date { get; set; }
        public long price{ get; set; }
}

我正在嘗試更新存儲數據點的表,所以每個項目大約有 10 個數據點

using (var db = new RuneMarketDbContext())
{
    foreach (var item in buySellData.Take(10))
    {
        var theItem = db.CurrentPriceTableModels.FirstOrDefault(x => x.Id == item.Value.Id);

        if (theItem != null)
        {
            // Item ID: item.Key
            var url = the30daydata + $"{item.Key}.json";
            var woop = await client.GetStringAsync(url);
            var datapoints = JsonConvert.DeserializeObject<The30DataPointsModel[]>(woop).ToList();

            Console.WriteLine($"{item.Value.Id}: Updating item data /w datapoint");
            theItem.Id = item.Value.Id;
            // ...

            theItem.The30DayPoints = datapoints;

            db.CurrentPriceTableModels.Update(theItem);
            db.SaveChanges();
        }
    }
}

正如你所看到的,我這樣做的方式是這樣做theItem.The30DayPoints = datapoints; 但這只是將更多數據附加到表中。

如何正確更新(替換)我的CurrentItemDataPoints表中的數據?

您需要刪除數據庫中的舊數據點或從中獲取它們(通過Include像這樣: db.CurrentPriceTableModels.Include(x => x.The30DayPoints).FirstOrDefault(x => x.Id == item.Value.Id) )和然后以某種方式匹配它們(例如基於日期),添加新的並更新現有的(並刪除缺失的,取決於您的應用程序邏輯)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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