RavenDB OnBeforeStore 不会使用 BulkInsert 触发
RavenDB OnBeforeStore does not fire using BulkInsert
我无法使用 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
作为 Session SaveChanges
方法
的一部分被调用
请参阅有关 OnBeforeStore
的文档
http://localhost:54391/docs/article-page/5.0/Csharp/client-api/session/how-to/subscribe-to-events
该事件采用参数 BeforeStoreEventArgs
,该参数由 Session 实体的 ID 和实体本身组成。
您在“Store”上定义了 OnBeforeStore
,但它不适用于 bulkInsert。
它用于从 Session.
保存时
BulkInsert 在 Store 本身上操作,而不是在 Session
我无法使用 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
作为 Session SaveChanges
方法
请参阅有关 OnBeforeStore
的文档
http://localhost:54391/docs/article-page/5.0/Csharp/client-api/session/how-to/subscribe-to-events
该事件采用参数 BeforeStoreEventArgs
,该参数由 Session 实体的 ID 和实体本身组成。
您在“Store”上定义了 OnBeforeStore
,但它不适用于 bulkInsert。
它用于从 Session.
保存时
BulkInsert 在 Store 本身上操作,而不是在 Session