簡體   English   中英

使用 EF Core 多次執行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM