RavenDB OnBeforeStore不会使用BulkInsert开火

RavenDB OnBeforeStore不会使用BulkInsert开火,ravendb,Ravendb,我不能在开火前使用大隔板 在正常的存储操作中,它可以正常工作 我正在尝试使用发票号码生成器添加格式化的号码,我想在OnBeforeStore中这样做 请参见代码示例: static async Task GenerateInvoiceTest() { using var store = new DocumentStore { Urls = new string[] { "https://localhost:8080" }, Da

我不能在开火前使用大隔板

在正常的存储操作中,它可以正常工作

我正在尝试使用发票号码生成器添加格式化的号码,我想在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();
}
静态异步任务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,但不使用如此有用的东西有点悲剧@艾琳达·拉希恩