我正在尝试将我自己的博客从MSSQL/EF转换为RavenDB,到目前为止,它基本上是无痛的,但我怀疑它不是“过时的索引”,就是过于自信的缓存,但我无法得到任何实际的答案。当我不知道实际问题是什么时,演示要比解释容易得多。
设置:
// Basic example class
public class ExampleClass{
public int ID {get;set;}
public string Value {get;set;}
}
// Once at application startup:
_docStore = new DocumentStore {
Url = "http://localhost:8080",
DefaultDatabase = "exampleDB",
Credentials = new NetworkCredential("userfoo","passbar"),
};
_docStore.Initialize();
// Querying data:
using (var session = _docStore.OpenSession())
{
var results = _session.Query<ExampleClass>().ToList();
foreach(var result in results)
{
Console.WriteLine(string.Format("ID #{0}: {1}",
result.ID, result.Value));
}
}的问题是:每当我通过_docStore会话以编程方式更新文档时,就会正常工作。当我从外部(来自另一个客户端,在RavenDB管理工作室等)编辑数据时,文档更新不会被返回。这里有一些例子。
1)数据库中的初始值
数据库中的文档:
运行查询;控制台结果:
( 2)通过_docStore会话将ExampleClass/2值更新为"BAR“之后。
数据库中的文档:
运行查询;控制台结果:
3)通过RavenDB studio将ExampleClass/2值更新为"bah“
数据库中的文档:
运行查询;控制台结果:
4)在通过RavenDB studio添加ExampleClass/3之后
数据库中的文档:
运行查询;控制台结果:
5)在通过RavenDB studio删除ExampleClass/2之后
数据库中的文档:
运行查询;控制台结果:
( 6)通过RavenDB studio更改ExampleClass/3值后
数据库中的文档:
运行查询;控制台结果:
6)在通过RavenDB studio添加ExampleClass/4之后
数据库中的文档:
运行查询;控制台结果:
*7)初始化新DocumentStore (无数据更改)*
数据库中的文档:
运行查询;控制台结果:
希望这在事情出了问题的地方表现得足够好。添加和删除整个文档很好,但是更新在第一次加载之后完全被忽略,这使我怀疑缓存而不是“陈旧的索引”.但我尝试过这样的方法却没有运气:
// After initialising document store:
_docStore.DisableAggressiveCaching();
_docStore.DatabaseCommands.DisableAllCaching();
_docStore.Conventions.DefaultQueryingConsistency =
ConsistencyOptions.QueryYourWrites;
// Whenever opening a new session:
_session.Advanced.DatabaseCommands.DisableAllCaching();
_session.Advanced.AllowNonAuthoritativeInformation = false;
// When querying:
var result = _session.Query<ExampleClass>()
.Customize(x=>x.WaitForNonStaleResults())
.ToList();$#*是怎么回事?为什么RavenDB恨我?
发布于 2012-04-02 08:41:24
RavenDB正在进行缓存,但它是通过检查etag来实现的,因此您不应该看到这一点。是否有可能您总是使用单个会话?
你能试着复制这个吗?
发布于 2012-04-03 12:09:39
看起来,与Oren的建议相匹配的docStore.OpenSession()总是返回相同的会话。使用当前的(1.0.701) RavenDB库解决了这个问题。
https://stackoverflow.com/questions/9971052
复制相似问题