ASP.NET |如何覆盖数据库中的数据?我不明白答案。 :D

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

此代码将我的数据保存到数据库。该应用程序记录每月的每一天所花费的时间。

他们使用EF写入SQL Server中的数据库。问题只是我希望他们覆盖而不是写更多]

Controller:

List<Karta_Model> objNextKartaModel = new List<Karta_Model>();

for (int i = 0; i < liczbaDni; i++)
{
     var modelNext = new Karta_Model()
     {
         Login = userName,
         Rok = numerRoku,
         Miesiac = numerMiesiaca,
         DzMiesiaca = modelKarta.Model1[i].DzMiesiaca.Value,
         DzTygodnia = modelKarta.Model1[i].DzTygodnia,
         Rozpoczecie = modelKarta.Model1[i].Rozpoczecie
         ....
    };

    objNextKartaModel.Add(modelNext);

    await _ecpContext.Karta.AddRangeAsync(objNextKartaModel);
    await _ecpContext.SaveChangesAsync();
}

[Id在SQL Server中定义为:

[Id] [int] IDENTITY(1,1)

我想出了从以前保存的数据库中提取第一行ID的想法

var nrIdBase = _ecpContext.Karta
                          .FirstOrDefault(f => f.DzMiesiaca == 1 && 
                                               f.Miesiac == numerMiesiaca && 
                                               f.Rok == numerRoku && 
                                               f.Login == userName).Id;

但是我不知道如何使用。

我尝试过这样的事情:

for (int i = 0; i < liczbaDni; i++)
{
     var modelNext = new Karta_Model()
     {
         Id = nrIdBase +i,
         Login = userName,
         Rok = numerRoku,
         Miesiac = numerMiesiaca,
         DzMiesiaca = modelKarta.Model1[i].DzMiesiaca.Value,
         DzTygodnia = modelKarta.Model1[i].DzTygodnia,
         Rozpoczecie = modelKarta.Model1[i].Rozpoczecie
         ....
     };
}

但出现错误:

InvalidOperationException:无法跟踪实体类型'Karta_Model'的实例,因为已经跟踪了另一个具有相同'{'Id'}键值的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'查看冲突的键值。

有人知道怎么做吗?

如何一次覆盖保存的数据?

c# asp.net asp.net-mvc asp.net-core
2个回答
1
投票

为了更新数据库中的现有记录,您需要在更新操作之前具有它的ID。


0
投票

按照上面我的评论中的想法,您可以做的一件事是在添加新数据之前删除表中的现有数据。

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