RavenDB OnBeforeStore不会使用BulkInsert开火
我不能在开火前使用大隔板 在正常的存储操作中,它可以正常工作 我正在尝试使用发票号码生成器添加格式化的号码,我想在OnBeforeStore中这样做 请参见代码示例:RavenDB OnBeforeStore不会使用BulkInsert开火,ravendb,Ravendb,我不能在开火前使用大隔板 在正常的存储操作中,它可以正常工作 我正在尝试使用发票号码生成器添加格式化的号码,我想在OnBeforeStore中这样做 请参见代码示例: static async Task GenerateInvoiceTest() { using var store = new DocumentStore { Urls = new string[] { "https://localhost:8080" }, Da
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();
}
静态异步任务GenerateInvoiceTest()
{
使用var store=newdocumentstore
{
URL=新字符串[]{”https://localhost:8080" },
Database=“APC”,
};
//这永远不会使用BulkInsert激发
store.OnBeforeStore+=(s,e)=>
{
如果(!(e.实体为发票))返回;
如果(invoice.InvoiceNumber!=0)返回;
invoice.InvoiceNumber=new Random().Next(11000);
};
store.Initialize();
//发票样本
var发票=新列表
{
新发票{StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(3)},
新发票{StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(3)},
};
//批量插入试验
使用var session=store.OpenAsyncSession();
使用var bulkInsert=store.bulkInsert();
invoices.ForEach(i=>bulkInsert.Store(i));
//这不会在之前开火
wait session.saveChangesSync();
foreach(发票中的var发票)
{
//总是打印0
控制台。写入线(发票。发票编号);
}
//定期测试
var otherInvoice=newinvoice{StartDate=DateTime.Now,EndDate=DateTime.Now.AddDays(3)};
等待会话。StoreAsync(其他发票);
//这件事以前确实发生过
wait session.saveChangesSync();
}
OnBeforeStore
作为会话的一部分调用
请参阅有关OnBeforeStore的文档
事件接受由会话实体ID和实体本身组成的参数BeforeStoreEventArgs
您可以在“存储”上定义OnBeforeStore
,但它不用于bulkInsert。用于从会话保存时使用
BulkInsert在商店本身而不是会话上运行谢谢。我想我将跳过此操作的BulkInsert,并通过调用
Store()
进行循环。我真希望BulkInsert上有BeforeStore事件,因为这破坏了我对RavenDB的一些预期用途。现在,我们将简单地避免BulkInsert,但不使用如此有用的东西有点悲剧@艾琳达·拉希恩