[英]Execute a command multiple times using EF Core
在 Dapper 中,我们多次执行命令title 允许我们使用不同的值多次运行查询。 这在使用ExecuteSqlRawAsync
function 的 EF Core 中是否可行?
像这样的东西:
_context.Database.ExecuteSqlRawAsync(myStringQuery, myParameters)
并且此代码应翻译以下查询:
INSERT INTO MyTable (MyColumn)
VALUES (@p0, @p2)
目前这种方法确实有效,但只添加我列表的第一个索引(仅限第一个参数)并生成以下查询:
INSERT INTO MyTable (MyColumn)
VALUES (@p0)
我的字符串查询如下所示:
StringBuilder myStringQuery = new();
sb.AppendLine("query ... VALUES ({0})")
我现在必须以这种方式解决问题
StringBuilder sb = new();
sb.AppendLine("INSERT INTO \"Blogs\"");
sb.AppendLine($"(\"{nameof(Blog.Url)}\")");
sb.AppendLine("VALUES");
int i;
for (i = 0; i < obj.Length - 1; i++)
{
sb.AppendFormat("({{{0}}}),", i);
}
sb.AppendFormat("({{{0}}})", i++);
await _context.Database.ExecuteSqlRawAsync(sb.ToString(), obj.Select(x => x.Url!));
但我想在这个链接中看到的 Dapper 版本中解决这个问题
您将不得不手动进行。
假设有一个实体:
public class Test
{
public Guid Id { get; set; }
public string Name { get; set; }
}
有一组参数:
var myParameters = Enumerable.Range(1, 3)
.Select(x => new object[] { Guid.NewGuid(), "name" + x });
Go 在循环中通过这个集合并对数据库执行查询:
foreach (var item in myParameters)
context.Database.ExecuteSqlRaw("insert into Tests values ({0},{1})", item);
EF-Core 支持Commands Batching
:
optionsBuilder.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=Demo.Batching;Trusted_Connection=True;",
options => options.MaxBatchSize(1)
);
它的默认值为1000
,这意味着它一次发送一批 1000 个insert/update/delete
。 每批应该有2100
个参数。 更多的将在不同的批次中发送。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.