我已经更改了我的数据模型,需要将所有对象的属性更改为null,因为在我的模型更改后反序列化它会引发异常.
我猜我可以为每个文档发布一个补丁,但是我找不到任何方法来修补某个类型的每个文档.我需要Ids.
所以我可以检索所有文档的ID列表,然后使用这些ID为每个文档创建一个补丁.但是我必须在没有反序列化对象的情况下检索ID,因为反序列化会引发异常.
有任何想法吗?
我正在学习lucene和ravendb上的绳索 - 我在Raven中有以下文件 -
{
"InternalEvent": {
"Desec": "MachineInfo: 1F8BFBFF000106A5_2103933941_00155D365607_WIN-UWJJ7OPR9TM_1, UserInfo: NT AUTHORITY\\LOCAL SERVICE_3, ProcessInfo: \\Device\\HarddiskVolume1\\Windows\\System32\\taskeng.exe, Pid: 5772, ObjInfo: , EventId: New Process Stopped",
"MachineInfo": "1F8BFBFF000106A5_2103933941_00155D365607_WIN-UWJJ7OPR9TM_1",
"UserInfo": "NT AUTHORITY\\LOCAL SERVICE_3",
"ProcessInfo": "\\Device\\HarddiskVolume1\\Windows\\System32\\taskeng.exe",
"Pid": 5772,
"ObjInfo": "",
"EventId": "New Process Stopped",
"Occured": "2011-08-08T23:25:31.8220000+01:00"
},
"Key": "6c4abf6a-156e-4224-8eac-72cde756b3c6"
}
Run Code Online (Sandbox Code Playgroud)
我正在查询数据库 -
var searchValue = "InternalEvent:Desec:(" + String.Join(" AND ", searchTerms) + ")";
var eventEntities = session.Advanced.LuceneQuery<EventCacheEntity>()
.WaitForNonStaleResultsAsOfLastWrite()
.Skip(0)
.Take(_pageLimit)
.Where(searchValue);
Run Code Online (Sandbox Code Playgroud)
搜索任何类似的东西,如果searchTerms只有一个术语,如机器,它肯定在字段desec.我究竟做错了什么?
我对lucene查询语法中的嵌套字段不太确定 - 即Internalevent:Desec ??
在调用IDocumentSession之前,raven client()不会向服务器发送任何内容SaveChanges.所以它可以被视为UnitOfWork实现,对吧?
我在想,唯一的区别纠正SaveChanges,并Transaction.Commit是后者回滚所有的变化,如果某事时未能提交?
我正在考虑将RavenDB用于我在高吞吐量应用程序中进行的一些查找场景.这将取代我需要对数据库进行的所有查询调用以获取诸如站点位置等内容.实际上看一些选项(也是.Net缓存).我知道你可以将RavenDB中的索引复制到SQL Server,但是想知道是否有人在将RavenDB与Sql Server同步的情况下做了相反的事情?
任何建议/意见将不胜感激.
--S
鉴于以下课程:
public class Lookup
{
public string Code { get; set; }
public string Name { get; set; }
}
public class DocA
{
public string Id { get; set; }
public string Name { get; set; }
public Lookup Currency { get; set; }
}
public class ViewA // Simply a flattened version of the doc
{
public string Id { get; set; }
public string Name { get; set; }
public string CurrencyName { get; set; } // …Run Code Online (Sandbox Code Playgroud) 有人可以解释为RavenDB设置复制的基本步骤吗?我正在使用build 888.从我在网上找到的,我可以猜到可能需要做什么,但我肯定知道.
我相信这是复制的官方文档:http: //ravendb.net/docs/server/bundles/replication
首先,该文件说明:
"可以通过将Raven.Bundles.Replication.dll删除到Raven的插件目录来启用Raven复制."
我在Bundles文件夹中看到了DLL,但是没有Plugins文件夹.我应该创造那个吗?它应该已经存在吗?
看起来我们需要这样做来指定复制服务器:

那是什么?我是否需要将此文档实际保存到数据库中?或者是在某个文件系统的配置文件中?如果我需要将其写入数据库,我是否只是将它放在我的应用程序中并让它第一次运行?每次?
如果这些问题可以得到解答,我可能会有基本的信息来开始.那么也许我可以一步一步地博客作为教程.
我是RavenDB的新手.我正在尝试使用多地图索引功能,但我不确定它是否是解决我问题的最佳方法.所以我有三个文件:Unit,Car,People.
汽车文件看起来像这样:
{
Id: "cars/123",
PersonId: "people/1235",
UnitId: "units/4321",
Make: "Toyota",
Model: "Prius"
}
Run Code Online (Sandbox Code Playgroud)
People文档看起来像这样:
{
Id: "people/1235",
FirstName: "test",
LastName: "test"
}
Run Code Online (Sandbox Code Playgroud)
单位文件:
{
Id: "units/4321",
Address: "blah blah"
}
Run Code Online (Sandbox Code Playgroud)
这是一个缩写示例,在我的真实应用程序中有更多字段,因此数据去规范化将是我的最后手段.
我需要创建和索引,将所有这三个docuemnts连接在一个文档中.像这样的东西:
{
CarId: "cars/123",
PersonId: "people/1235",
UnitId: "units/4321",
Make: "Toyota",
Model: "Prius"
FirstName: "test",
LastName: "test"
Address: "blah blah"
}
// same unit different person owns a different car
{
CarId: "cars/122",
PersonId: "people/1236",
UnitId: "units/4321",
Make: "Toyota",
Model: "4runner"
FirstName: "test",
LastName: "test"
Address: "blah blah"
} …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用RavenDB,到目前为止我还喜欢它.然而,我仍然坚持如何单元测试与之交互的控制器操作.
我发现的所有问题/文章都是这样的:单元测试RavenDb查询告诉我应该在内存中使用RavenDB而不是嘲笑它但是我找不到一个如何完成的实例.
例如,我有一个控制器操作将员工添加到数据库(是的,它过于简化,但我不想让问题复杂化)
public class EmployeesController : Controller
{
IDocumentStore _documentStore;
private IDocumentSession _session;
public EmployeesController(IDocumentStore documentStore)
{
this._documentStore = documentStore;
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
_session = _documentStore.OpenSession("StaffDirectory");
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (_session != null && filterContext.Exception == null) {
_session.SaveChanges();
_session.Dispose();
}
}
[HttpGet]
public ViewResult Create()
{
return View();
}
[HttpPost]
public RedirectToRouteResult Create(Employee emp)
{
ValidateModel(emp);
_session.Store(emp);
return RedirectToAction("Index");
}
Run Code Online (Sandbox Code Playgroud)
如何在单元测试中验证添加到数据库的内容?有没有人在MVC应用程序中有任何涉及RavenDb的单元测试的例子?
我正在使用MSTest,如果这很重要,但我很乐意尝试从其他框架中翻译测试.
谢谢.
编辑
好吧,我的测试初始化创建了注入控制器构造函数的文档存储,但是当我运行测试时,OnActionExecuting事件没有运行,所以没有会话要使用,测试失败并带有空引用异常.
[TestClass]
public class …Run Code Online (Sandbox Code Playgroud) 我使用http api来查询ravendb(所以LINQ查询不是我的问题的解决方案).我的产品文档如下所示:
{
"editDate": "2012-08-29T15:00:00.846Z"
}
Run Code Online (Sandbox Code Playgroud)
我有索引:
from doc in docs.Product
select new { doc.editDate }
Run Code Online (Sandbox Code Playgroud)
我想在特定日期和时间之前查询所有文档.我可以使用以下语法在DATE上查询:
editDate: [NULL TO 2012-09-17]
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何查询时间组件.有任何想法吗?
我编写了以下代码,在我的乌鸦数据库中为标题1添加标题字段.
url := "http://localhost:8083/databases/drone/docs/1"
fmt.Println("URL:>", url)
var jsonStr = []byte(`{"title":"Buy cheese and bread for breakfast."}`)
req, _ := http.NewRequest("PATCH", url, bytes.NewBuffer(jsonStr))
req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它不起作用?我得到以下回应的身体,这不是我所期待的.我期待成功的回应.
<html>
<body>
<h1>Could not figure out what to do</h1>
<p>Your request didn't match anything that Raven knows to do, sorry...</p>
</body>
Run Code Online (Sandbox Code Playgroud)
有人可以指出我在上面的代码中缺少什么?
ravendb ×10
c# ×4
asp.net-mvc ×1
go ×1
lucene ×1
mstest ×1
ravendb-http ×1
replication ×1
sql-server ×1
transactions ×1
unit-of-work ×1
unit-testing ×1