如何使用EF Core更新表中的列表数据

问题描述 投票:0回答:1

我有两个表CurrentItemCurrentItemDataPoints

CurrentItem表具有列数据,例如Id(pk), ItemId, Name, Price等,其中表CurrentItemDataPoints保留每个项目的30天数据点。

例如,..

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

[其中每个都是CurrentItemDataPoints中的一行

[itemIditemId相关,日期是日期,价格是价格。

现在,我构建模型的方式是这样的>>

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表中的数据?

我有两个表CurrentItem和CurrentItemDataPoints。 CurrentItem表具有列数据,例如Id(pk),ItemId,Name,Price等,其中表CurrentItemDataPoints拥有30天的时间...

c# .net entity-framework entity-framework-core ef-code-first
1个回答
0
投票

您需要删除数据库中的旧数据点或从中获取它们(例如通过Includedb.CurrentPriceTableModels.Include(x => x.The30DayPoints).FirstOrDefault(x => x.Id == item.Value.Id)),然后以某种方式进行匹配(例如,基于日期),添加新数据并更新现有数据(并删除丢失的,依赖的在您的应用程序逻辑上)。

© www.soinside.com 2019 - 2024. All rights reserved.