我正在尝试通过 IDocumentStoreListener 向简单模型添加自动增量。我发现有关此功能实现的文档相当稀少(任何指针将不胜感激)。我一直在尝试关注这篇博文,但它似乎已经过时了。当我尝试实施
store = new EmbeddableDocumentStore
{
RunInMemory = true
}
.RegisterListener(new AuditableEntityListener(() => "Test User"))
.Initialize();
我收到一个构建错误,指出“无法将 lambda 表达式转换为 Raven.Client.IDocumentStore 类型,因为它不是委托类型”。
我设法通过使用此代码来构建它
store = new EmbeddableDocumentStore
{
RunInMemory = true
}
.RegisterListener(new AuditableEntityListener(store ))
.Initialize();
监听器的代码如下
public class PublicIdStoreListener : IDocumentStoreListener
{
HiLoKeyGenerator generator;
IDocumentStore store;
public PublicIdStoreListener(IDocumentStore store)
{
this.store = store;
generator = new HiLoKeyGenerator(store, "verifications", 1024);
}
public void AfterStore(string key, object entityInstance, RavenJObject metadata)
{
throw new NotImplementedException();
}
public bool BeforeStore(string key, object entityInstance, RavenJObject metadata)
{
var verification = entityInstance as VerifyAccountModel;
if (verification.PublicId == "0")
{
verification.PublicId = generator.GenerateDocumentKey(store.Conventions, entityInstance);
}
return false;
}
}
但是,当我运行应用程序时,它会在存储任何文档时命中 PublicIdStoreListener,而不仅仅是 VerifyAccountModel,这会导致应用程序抛出异常。
我想知道是否有人可以指出我正确的方向,因为我对实际应该如何实施感到困惑。提前致谢。
编辑 我将文档监听器更新为以下
public bool BeforeStore(string key, object entityInstance, RavenJObject metadata)
{
if (entityInstance.GetType() == new VerifyAccountModel().GetType())
{
var verification = entityInstance as VerifyAccountModel;
if (verification.PublicId == "0")
{
verification.PublicId = generator.GenerateDocumentKey(store.Conventions, entityInstance);
}
}
return true;
}
更新 我发现我无法通过 RegisterListener 在实例化的同一行中附加商店。必须事后完成,否则传入时store仍然为null。感谢您的帮助。