我在内存模式下使用RavenDB进行单元测试.我的查询由静态索引支持.我没有使用WaitForNonStaleResults()API(我也不想).
测试的典型工作流程是:
IndexCreation.CreateIndexes(Assembly, IDocumentStore)我注意到步骤1-3发生得如此之快,静态索引没有时间在步骤4之前得到更新 - 因此索引是陈旧的.
我为此创建了一个快速的解决方案.在第3步之后,我执行:
while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0)
Thread.Sleep(10);
Run Code Online (Sandbox Code Playgroud)
这感觉很麻烦.我想知道的是:
有没有办法告诉RavenDb对某些DocumentStore或DocumentSession的所有查询使用WaitForNonStaleResults模式?
我正在使用RavenDb嵌入式.作为我整合测试的一部分,我想检查对象是否持久化.当我在一个对象上SaveChanges然后检索它时,除非我处理我的连接,否则找不到它.
这对我不起作用,因为没有返回任何文件
using (var session = _dataDocumentStore.Instance.OpenSession())
{
session.Store(file);
session.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
....
using (var session = _dataDocumentStore.Instance.OpenSession() )
{
return session.Query<File>().ToList();
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个Flush方法来处理和重新创建一个可以工作的EmbeddableDocumentStore,但是因为这是感觉基本的东西我可能会以错误的方式处理事情:
public static IDocumentStore Initialize()
{
instance = new EmbeddableDocumentStore
{
DataDirectory = "App_Data/Database",
UseEmbeddedHttpServer = true,
};
instance.Initialize();
return instance;
}
public void Flush()
{
instance.Dispose();
Initialize();
}
Run Code Online (Sandbox Code Playgroud)
你如何坚持RavenDB然后检查它是否一直存在?对此的任何建议都会很棒
我可能不明白RavenDb中的"In"扩展方法是如何工作的.我认为它相当于SQL世界中的IN命令,例如WHERE Number IN(1,2,3).但它表现得很奇怪.
// i have 3 records - two with Normal severity, one with Low severity
using (var session = store.OpenSession())
{
session.Store(new TestObject { Name = "o1", Severity = Severity.Normal });
session.Store(new TestObject { Name = "o2", Severity = Severity.Low });
session.Store(new TestObject { Name = "o3", Severity = Severity.Normal });
session.SaveChanges();
}
// this writes the Low severity record, it seems correct
using (var session = store.OpenSession())
{
var data = session.Query<TestObject>()
.Where(o => o.Severity.In(new[] { Severity.Low …Run Code Online (Sandbox Code Playgroud) 我已经实现了RavenDB 非规范化参考模式.我正在努力将静态索引和补丁更新请求连接在一起,以确保在更改引用的实例值时更新我的非规范化引用属性值.
这是我的域名:
public class User
{
public string UserName { get; set; }
public string Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class UserReference
{
public string Id { get; set; }
public string UserName { get; set; }
public static implicit operator UserReference(User user)
{
return new UserReference
{
Id = user.Id,
UserName = user.UserName
};
}
}
public class Relationship
{
public …Run Code Online (Sandbox Code Playgroud)