到目前为止,我尝试过以下方法:
public class Widget
{
public int Id;
public string Name;
}
public static class Main
{
public static void Main()
{
// Initialize store and preload with widgets...
using (var session = store.OpenSession())
{
var widgets = session.Load<Widget>();
foreach(var widget in widgets)
{
Console.WriteLine(widget.Name);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经能够通过添加索引然后使用该索引作为查询来加载所有:
var store = new DocumentStore();
store.DatabaseCommands.PutIndex("AllWidgets", new IndexDefinition<Widget>
{
Map = widget => from widget in widgets
select new { widget }
});
// Back in Main
var widgets = …Run Code Online (Sandbox Code Playgroud) 我正在使用Raven DB的存储库模式.我的存储库界面是
public interface IRepository<T> where T : Entity
{
IEnumerable<T> Find(Func<T, bool> exp);
void Delete(T entity);
void Save();
...
}
Run Code Online (Sandbox Code Playgroud)
并且实施是
public class Repository<T> : IRepository<T> where T : Entity
{
public IEnumerable<T> Find(Func<T, bool> exp)
{
return session.Query<T>().Where(exp);
}
public void Delete(T entity)
{
session.Delete(entity);
}
public void Save()
{
session.SaveChanges();
}
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试,标记所有实体的删除,保存更改和查询数据库,以查看结果计数是否为零
[Test]
public void DeleteValueTest()
{
//resolve repository
var repository = ContainerService.Instance.Resolve<IRepository<DummyType>>();
Func<DummyType, bool> dummyTypeExpr = item => item.GetType() == typeof(DummyType);
//find all entries …Run Code Online (Sandbox Code Playgroud) 我正在使用ravendb序列化一个对象并通过mstest测试它.
我得到了这个结果: System.ArgumentException: Object serialized to String. RavenJObject instance expected.
这是我的代码
public class Store
{
private static IDocumentStore store = createStore();
private static EmbeddableDocumentStore createStore()
{
var returnStore = new EmbeddableDocumentStore();
returnStore.DataDirectory = @"./PersistedData";
returnStore.Initialize();
return returnStore;
}
public static void Write(string value)
{
using (var session = store.OpenSession())
{
session.Store(value);
session.SaveChanges();
}
}
}
Run Code Online (Sandbox Code Playgroud)
似乎根本原因在于RavenJObject如何工作,因为它抛出相同的错误:
RavenJObject storeMe = RavenJObject.FromObject("errors", new JsonSerializer());
Run Code Online (Sandbox Code Playgroud)
如何在RavenDB中进行自定义序列化?
我有以下测试跳过 -
[Test]
public void RavenPagingBehaviour()
{
const int count = 2048;
var eventEntities = PopulateEvents(count);
PopulateEventsToRaven(eventEntities);
using (var session = Store.OpenSession(_testDataBase))
{
var queryable =
session.Query<EventEntity>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).Skip(0).Take(1024);
var entities = queryable.ToArray();
foreach (var eventEntity in entities)
{
eventEntity.Key = "Modified";
}
session.SaveChanges();
queryable = session.Query<EventEntity>().Customize(x => x.WaitForNonStaleResultsAsOfLastWrite()).Skip(0).Take(1024);
entities = queryable.ToArray();
foreach (var eventEntity in entities)
{
Assert.AreEqual(eventEntity.Key, "Modified");
}
}
}
Run Code Online (Sandbox Code Playgroud)
PopulateEventsToRaven只是将2048个非常简单的文档添加到数据库中.
第一个跳过组合获得前1024个doucuments修改文档,然后提交更改.
下一个跳过组合再次想要获得前1024个文档,但这次它得到文档号1024到2048,因此测试失败.为什么这样,我会再次期待第一个1024?
编辑:我已经变了,如果我不修改文档,行为就好了.
如果我选择RavenDB作为一个相当标准的类似CMS的Web应用程序,与SQL Server相比,我会失去什么?
编辑:标题中有一个"好处",这是一个有点争议的术语.也许我应该说"可能性"或"功能"之类的东西,希望我很清楚我追求的是什么.
想到的一些事情(但我是RavenDB的新手,所以这只是一些建议,有些可能是错的,我希望有人会提供更完整和准确的列表):
一个更完整/准确的列表将不胜感激.
(注意:我并不是说我需要所有这些(或任何),我只是想了解如果我选择RavenDB会有什么不可用.另外,请不要讨论RavenDB的优势,我知道他们很容易从官方网站上消化.)
在Raven Studio UI中,当您查看文档时,您可以阅读(在页面右侧)文档的最后写入日期.
我没有通过C#中的客户端API找到此信息的任何访问权限.你知道这是否可能?
面向对象和文档数据库之间有什么区别?
我没有使用面向对象的数据库,但是当我使用文档数据库(RavenDb)时,我存储和读取通常的面向对象的类没有问题.
默认情况下运行Raven.Server.exe时,管理面板在IP:PORT地址处可见.如何仅限特定用户访问此面板?
是否存在一个公式/估计/感觉,根据文档种类数,每个文档的字段数和它们之间的关系数,向我们展示RavenDB数据库中索引的最佳数量是多少?
补充说明:
据我所知(第一)我们在RavenDB中查询索引,而不是文档和(第二)索引就像物化视图一样,因此它们可能会花费很多.我需要知道有多少索引会损害RavenDB在更新它们时的性能并使延迟太大而无法忽略?
由于Raven/MaxNumberOfParallelIndexTasks设置为当前计算机中的处理器数量,因此它意味着其他索引的索引过程将阻塞,直到当前索引任务结束?或者他们是一次又一次的部分更新?
任何人都可以指导我如何使用Autofac注册RavenDB?
builder.Register<DocumentStore>(那之后呢?