gpt4 book ai didi

RavenDB OnBeforeStore 不会使用 BulkInsert 触发

转载 作者:行者123 更新时间:2023-12-03 23:43:17 29 4
gpt4 key购买 nike

我无法使用 BulkInsert 触发 OnBeforeStore。
它在常规 Store 操作期间很好地触发。
我正在尝试使用发票编号生成器来添加格式化的编号,我想在 OnBeforeStore 中执行此操作。
见代码示例:

static async Task GenerateInvoiceTest()
{
using var store = new DocumentStore
{
Urls = new string[] { "https://localhost:8080" },
Database = "APC",
};

//this never fires using BulkInsert
store.OnBeforeStore += (s, e) =>
{
if (!(e.Entity is Invoice invoice)) return;
if (invoice.InvoiceNumber != 0) return;
invoice.InvoiceNumber = new Random().Next(1, 1000);
};

store.Initialize();

//sample invoices
var invoices = new List<Invoice>
{
new Invoice { StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(3) },
new Invoice { StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(3) },
};

//bulk insert test
using var session = store.OpenAsyncSession();
using var bulkInsert = store.BulkInsert();
invoices.ForEach(i => bulkInsert.Store(i));

//this does NOT fire OnBeforeStore
await session.SaveChangesAsync();

foreach (var invoice in invoices)
{
//always prints 0
Console.WriteLine(invoice.InvoiceNumber);
}

//regular test
var otherInvoice = new Invoice { StartDate = DateTime.Now, EndDate = DateTime.Now.AddDays(3) };

await session.StoreAsync(otherInvoice);

//this DOES fire OnBeforeStore
await session.SaveChangesAsync();
}

最佳答案

OnBeforeStore作为 的一部分被调用专场 SaveChanges方法
请参阅有关 的文档OnBeforeStore
http://localhost:54391/docs/article-page/5.0/Csharp/client-api/session/how-to/subscribe-to-events
该事件采用参数 BeforeStoreEventArgs 组成专场实体的 ID 和实体本身。
您定义 OnBeforeStore在“”上店铺 ' 但它不适用于bulkInsert。
它用于从 保存时专场 .
BulkInsert 在 Store 本身上运行,而不是在 Session 上运行

关于RavenDB OnBeforeStore 不会使用 BulkInsert 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64486887/

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