每次保存到数据库时如何擦除 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。无论如何,这甚至可能比比较方法更快。
我目前构建了一个 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。无论如何,这甚至可能比比较方法更快。