BeforeStore不';在Ravendb4中,异步会话不能工作吗?
我一直在将代码迁移到Ravendb4 我注意到Ravendb4中的侦听器自版本3以来发生了变化。在v3中,您使用了BeforeStore不';在Ravendb4中,异步会话不能工作吗?,ravendb,ravendb4,Ravendb,Ravendb4,我一直在将代码迁移到Ravendb4 我注意到Ravendb4中的侦听器自版本3以来发生了变化。在v3中,您使用了IDocumentStoreListener和RegisterListener,但在v4中,您直接在会话实例上订阅BeforeStore事件 但是,myBeforeStore-事件侦听器不会在异步会话上启动(而是在同步会话上启动)。这是故意的,还是我遗漏了什么 我正在使用RavenDB客户端(.NET)和服务器的版本4.0.0-rc-40025 谢谢 以下是重新创建问题的示例控制台应
IDocumentStoreListener
和RegisterListener
,但在v4中,您直接在会话实例上订阅BeforeStore
事件
但是,myBeforeStore
-事件侦听器不会在异步会话上启动(而是在同步会话上启动)。这是故意的,还是我遗漏了什么
我正在使用RavenDB客户端(.NET)和服务器的版本4.0.0-rc-40025
谢谢
以下是重新创建问题的示例控制台应用程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Raven.Client.Documents;
namespace BeforeStoreAsync
{
class Program
{
static void Main(string[] args)
{
IDocumentStore store = new DocumentStore
{
Urls = new[] { "http://localhost:8080" },
Database = "MyDatabase"
};
store.OnBeforeStore += (sender, eventArgs) =>
{
if (eventArgs.Entity is MyEntity entity)
entity.Description = DateTime.UtcNow.ToString();
};
store = store.Initialize();
var syncEntity = StoreEntitySync(store);
var asyncEntity = StoreEntityAsync(store).Result;
if (string.IsNullOrWhiteSpace(syncEntity.Description))
Console.WriteLine($"BeforeStore didn't run for {nameof(syncEntity)}.");
if (string.IsNullOrWhiteSpace(asyncEntity.Description))
Console.WriteLine($"BeforeStore didn't run for {nameof(asyncEntity)}.");
}
private static MyEntity StoreEntitySync(IDocumentStore store)
{
using(var session = store.OpenSession())
{
var entity = new MyEntity
{
Name = "Sync session"
};
session.Store(entity);
session.SaveChanges();
return entity;
}
}
private static async Task<MyEntity> StoreEntityAsync(IDocumentStore store)
{
using (var session = store.OpenAsyncSession())
{
var entity = new MyEntity
{
Name = "Async session"
};
await session.StoreAsync(entity);
await session.SaveChangesAsync();
return entity;
}
}
}
public class MyEntity
{
public string Name { get; set; }
public string Description { get; set; }
public string Id { get; set; }
}
}
不,这在所有情况下都被称为。
实际上,实际的调用机制根本不在
存储
中,而是在SaveChanges
或savechangesync
期间调用的,谢谢您的回复!那么肯定还有其他问题。我已经编辑了这个问题,并添加了一个代码示例来重新创建这个问题。你能帮我找到问题吗?谢谢确认这是一个bug,在下一个版本中修复
BeforeStore didn't run for asyncEntity.