相关疑难解决方法(0)

如何在测试期间处理陈旧的索引?

我在内存模式下使用RavenDB进行单元测试.我的查询由静态索引支持.我没有使用WaitForNonStaleResults()API(我也不想).

测试的典型工作流程是:

  1. 在In-Memory模式下初始化RavenDB
  2. 使用集成索引 IndexCreation.CreateIndexes(Assembly, IDocumentStore)
  3. 插入测试数据(用于验证查询行为)
  4. 运行查询
  5. 验证查询输出

我注意到步骤1-3发生得如此之快,静态索引没有时间在步骤4之前得到更新 - 因此索引是陈旧的.

我为此创建了一个快速的解决方案.在第3步之后,我执行:

while (documentStore.DocumentDatabase.Statistics.StaleIndexes.Length != 0)
    Thread.Sleep(10);
Run Code Online (Sandbox Code Playgroud)

这感觉很麻烦.我想知道的是:

  • 在In-Memory模式下运行RavenDB时,索引是否过时是正常的?
  • 在测试期间是否有更好的方法来避免过时的索引?

c# testing indexing ravendb

11
推荐指数
1
解决办法
893
查看次数

每个DocumentStore的WaitForNonStaleResults

有没有办法告诉RavenDb对某些DocumentStore或DocumentSession的所有查询使用WaitForNonStaleResults模式?

.net nosql ravendb

7
推荐指数
1
解决办法
817
查看次数

RavenDB如何刷新?

我正在使用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然后检查它是否一直存在?对此的任何建议都会很棒

c# persistence flush ravendb

7
推荐指数
2
解决办法
2410
查看次数

RavenDb"In"运算符如何工作?

我可能不明白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)

c# linq lucene ravendb

7
推荐指数
1
解决办法
1496
查看次数

RavenDb:更新非规范化引用属性值

我已经实现了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)

ravendb

5
推荐指数
1
解决办法
1268
查看次数

标签 统计

ravendb ×5

c# ×3

.net ×1

flush ×1

indexing ×1

linq ×1

lucene ×1

nosql ×1

persistence ×1

testing ×1