每次保存到数据库时如何擦除 table 中的数据

How to wipe data in a table each time you save to a database

我目前构建了一个 Visual Studio C# 项目,通过 Entity Framework 将 API 数据保存到数据库中。一切正常,但我注意到每次我 运行 应用程序时,数据都会在 table.

中重复

我必须时不时地重新启动它,因为有新数据需要存储,但我在想有没有一种简单的方法,或者甚至只是一种在保存数据之前擦除 table 的方法每次 运行 应用程序到数据库?

这是我现在运行正在使用的代码。

public static void getAllRequestData()
{
    var client = new RestClient("[My API URL]");
    var request = new RestRequest();
    var response = client.Execute(request);

    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        string rawResponse = response.Content;
        AllRequests.Rootobject result = JsonConvert.DeserializeObject<AllRequests.Rootobject>(rawResponse);

        using (var db = new TransitionContext())
        {
            db.RequestDetails.AddRange(result.Operation.Details);
            db.SaveChanges();
        } //Utilising EF to save data to the DB
    }
} //Method that calls and stores API data

该方法用于获取API数据,反序列化,然后保存到Db中。

public class TransitionContext : DbContext
{
    private const string connectionString = @"[My Server]";

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(connectionString);
    }

    public DbSet<AllRequests.Detail> RequestDetails { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AllRequests.Detail>().HasKey(r => r.Id);
    }
}

这是我的 Entity Framework DbContext,它构建了 table 并将数据映射到每一列。

这一切都有效,但是我必须在我的代码中包含什么才能在我每次 运行 项目时停止复制数据?目前,每次我 运行 项目时,我的 table 中只有 1000 多行,最终,它被阻塞了。我希望每次 运行 它都是相同的数据,除了每周添加一些内容。

如有任何帮助,我们将不胜感激。

解决此问题将取决于 API 的工作方式。如果数据以在调用之间不改变的顺序返回,那么您可以记住数据库中保存的最后一个对象的索引,下次只保存具有更高索引的字段。但是,如果在调用之间没有维护顺序,那么您将不得不手动比较对象以检查重复项,这不是很节省时间,但总比没有好。问题是,如果返回的每个项目都不是唯一的,那么第二个选项将无法可靠地工作。在那种情况下,唯一可行的方法是完全清除 table 并重新插入所有内容。您可以通过调用 db.RequestDetails.RemoveRange(db.RequestDetails) 来清空 table。无论如何,这甚至可能比比较方法更快。