我不能让OnBeforeStore使用BulkInsert触发。
在正常的商店操作过程中,它会很好地触发。
我正在尝试使用发票号码生成器来添加一个格式化的数字,我想在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();
}发布于 2020-10-22 17:25:07
OnBeforeStore作为会话 SaveChanges方法的一部分被调用。
请参阅有关OnBeforeStore的文档。
http://localhost:54391/docs/article-page/5.0/Csharp/client-api/session/how-to/subscribe-to-events
该事件采用参数BeforeStoreEventArgs,该参数由会话实体的ID和实体本身组成。
您可以在'Store‘上定义,但它不适合与bulkInsert一起使用。
它用于从会话中保存数据。
BulkInsert操作于商店本身,而不是会话
https://stackoverflow.com/questions/64486887
复制相似问题