gpt4 book ai didi

c# - 如何在linq to sql中批量插入/更新?

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:21 24 4
gpt4 key购买 nike

我该如何做这两种情况。

目前我正在做这样的事情

public class Repository
{
private LinqtoSqlContext dbcontext = new LinqtoSqlContext();

public void Update()
{
// find record
// update record
// save record ( dbcontext.submitChanges()
}

public void Insert()
{
// make a database table object ( ie ProductTable t = new ProductTable() { productname
="something"}
// insert record ( dbcontext.ProductTable.insertOnSubmit())
// dbcontext.submitChanges();
}
}

所以现在我正在尝试加载一个包含大量记录的 XML 文件。首先,我一次验证一个记录。然后我想将它们插入数据库,但我不想在每条记录之后执行 submitChanges(),而是想在最后进行批量提交。

所以我有这样的东西

public class Repository
{
private LinqtoSqlContext dbcontext = new LinqtoSqlContext();
public void Update()
{
// find record
// update record
}

public void Insert()
{
// make a database table object ( ie ProductTable t = new ProductTable() { productname
="something"}
// insert record ( dbcontext.ProductTable.insertOnSubmit())
}

public void SaveToDb()
{
dbcontext.submitChanges();
}
}

然后在我的服务层我会这样做

for(int i = 0; i < 100; i++)
{
validate();
if(valid == true)
{
update();
insert()
}
}

SaveToDb();

因此假设我的 for 循环对在 xml 文件中找到的所有记录进行计数。我先验证一下。如果有效,那么我必须在插入记录之前更新表格。然后我插入记录。

在那之后我想一次性保存所有内容。

我不确定是否可以在更新时进行大量保存,是否必须在每次更新之后进行,或者什么。

但我认为它肯定适用于插入的。

似乎没有什么崩溃,我不确定如何检查记录是否被添加到 dbcontext。

最佳答案

简单的回答是:你没有。 Linq2Sql 有很多东西 - 它不能替代批量上传/批量复制。使用 ETL 路线你会更有效率:

  • 用新数据生成一个平面文件(csv 等)
  • 使用批量加载机制将其加载到数据库中
  • 如果数据正在更新等 - 将其加载到临时表中并使用 MERGE 命令将其合并到主表中。

Linq2Sql 在设计上总是会陷入大量插入场景。 ORM 只是不是 ETL 工具。

关于c# - 如何在linq to sql中批量插入/更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com