我想编写自己的简单桌面RavenDB资源管理器,类似于Web UI.这主要是为了学习Raven.
所以我的第一个任务是从数据库中读取所有文档,无论它们属于哪个应用程序.我想使用客户端API实现这一点,但似乎session.Query和session.LuceneQuery都需要类说明符.
我应该使用什么API来完成这项任务?
我在我的项目中有这个代码,我如何使用Moq来管理文档并设置返回值?
_session.Query<IPageModel, PageByUrl>()
.Customize(x => x.WaitForNonStaleResultsAsOfLastWrite())
.FirstOrDefault(x => x.Metadata.Url == virtualUrl);
Run Code Online (Sandbox Code Playgroud)
这是我在问之前尝试过的
var session = new Mock<IDocumentSession>();
var pageModel = new DummyModel();
session.Setup(x => x.Query<IPageModel, PageByUrl>()
.Customize(y => y.WaitForNonStaleResultsAsOfLastWrite())
.FirstOrDefault(y => y.Metadata.Url == path)).Returns(pageModel);
Run Code Online (Sandbox Code Playgroud)
抛出一个异常,我无法弄清楚如何更改moq
System.NotSupportedException : Expression references a method that does not belong to the mocked object: x => x.Query<IPageModel,PageByUrl>().Customize(y => y.WaitForNonStaleResultsAsOfLastWrite()).FirstOrDefault<IPageModel>(y => y.Metadata.Url == .path)
at Moq.Mock.<>c__DisplayClass1c`2.<Setup>b__1b()
at Moq.Mock.Setup(Mock mock, Expression`1 expression, Func`1 condition)
at Moq.Mock`1.Setup(Expression`1 expression)
at BrickPile.Tests.Web.Routing.PathResolverTests.Home_Page_With_Default_Action(String path) in PathResolverTests.cs: line 26
Run Code Online (Sandbox Code Playgroud) 给定一个非常简单的string[],我试图用简单的LINQ语法完成以下内容RavenDB.
public class Item {
public string[] Tags { get; set; }
}
var list = new List<Item> {
new Item { Tags = new string[] { "one", "two", "three" } },
new Item { Tags = new string[] { "one", "two" } },
new Item { Tags = new string[] { "one" } }
};
Run Code Online (Sandbox Code Playgroud)
然后我可以很容易地查询这个,就像这样;
var items = session.Query<Item>().Search( n => n.Tags, "one" ).Take(3).ToList();
Run Code Online (Sandbox Code Playgroud)
这让我可以轻松地获取所有带有string[]我想要的标签的项目,但我想做相反的事情(显然,对于我的用例,情景要复杂得多,我为这个例子凝聚了它).
我想编写一个可以与Raven一起使用的LINQ查询,它将为我提供所有没有给定标记的对象.就像'倒置'搜索一样.
Contains()已从RavenDB中删除,因此我无法在其上使用反布尔值.到现在为止,我只需要进行查询,然后在结果上使用另一个LINQ命令,我觉得效率非常低.有谁知道如何做到这一点?
我也在RavenDB Google …
我需要能够在运行时使用OR语句构建查询.如果我使用下面的方法来构建查询,那么一切都是AND.我真的需要每个过滤器值为OR才能使此查询正常工作.
public class IdAndRole
{
public string Id {get;set;}
public string Role {get;set;}
}
var idAndRoles = session.Query<IdAndRole, Roles_ById>();
foreach(var filter in filterValues)
{
idAndRoles = idAndRoles.Where(x => x.In(filter.Id) && x.In(filter.Role));
}
Run Code Online (Sandbox Code Playgroud)
伪代码:
(filter[0].Id == value1 && filter[0].Role == role1) ||(filter[1].Id == value2 && filter[1].Role == role2)
Run Code Online (Sandbox Code Playgroud) 我是新手使用RavenDB并试图让索引在一个简单的MVC3应用程序中工作,该应用程序允许用户输入地理位置.我有两个模型,一个UserModel和一个LocationModel.LocationModel在保存时存储UserId,我正在尝试为此创建索引.
public class Locations_ByUser : AbstractIndexCreationTask<LocationModel>
{
public Locations_ByUser()
{
Map = locations => from location in locations
select new { location.UserId };
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下代码注册索引
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
//ADD THE MODEL BINDER FOR LIST TO STRING
ModelBinders.Binders.Add(typeof(TestAPI.Models.LocationModel), new TestAPI.Classes.LocationModelBinder());
//INIT THE STORE, DO ONCE PER APP START
TestAPI.Classes.DataDocumentStore.Initialize();
//SET THE INDEXES
IndexCreation.CreateIndexes(typeof(Locations_ByUser).Assembly, TestAPI.Classes.DataDocumentStore.Instance);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试从mvc应用程序调用索引时
[HttpGet]
public ActionResult Index()
{
var result = this.DocumentSession.Query<LocationModel>("Locations_ByUser").ToList();
foreach (var userid in result)
{
Console.Out.WriteLine(userid);
}
return View();
} …Run Code Online (Sandbox Code Playgroud) 我正在使用RavenDB并在尝试订购结果时遇到问题.
这是一个类的示例.
public class Post {
public int Id {get;get;}
public DateTimeOffset Posted {get;set;}
public List<SectionAssignment> Sections{get;set;}
public string Headline {get;set;}
}
public class SectionAssignment {
public int SectionId {get;set;}
public int Priority {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我试图返回一组分配给特定部分的帖子,然后按(desc)命令发布属性的日期部分.然后我想按SectionAssignment Priority排序.这是我得到的:
var posts= RavenSession.Query<Post>()
.Where(s => s.Sections.Any(sec=>sec.SectionId==5))
.OrderByDescending(s => s.Posted.Date)
.ThenBy(s => s.Section.Where(sec => sec.Id == 5).Select(sc => sc.Priority).Single())
.Take(10)
.ToList();
Run Code Online (Sandbox Code Playgroud)
我是以下例外:
无法将类型为"System.Linq.Expressions.MethodCallExpressionN"的对象强制转换为"System.Linq.Expressions.MemberExpression".
我可以看到为什么会这样,但我无法弄清楚如何使这项工作.有什么建议?
我试图删除比ravenDB中的某个点更旧的文档.我仍然不熟悉Lucene,并且很难构建这个查询.
_Session.Advanced.DatabaseCommands.DeleteByIndex(
typeof(AssetsByExpirationDate).Name,
new IndexQuery()
{
Query = string.Format("ExpirationDate:[\"{0:MM/dd/yyyy}\" TO \"{1:MM/dd/yyyy}\"]", DateTime.MinValue, new DateTime(2012,6,1))
});
Run Code Online (Sandbox Code Playgroud)
查询在特定日期之前删除项目的正确语法是什么?
我有一个Asp.Net MVC3应用程序,它使用嵌入式RavenDB来存储数据.视图需要以这种方式由控制器创建的json数据:
public ContentResult Data()
{
var res = JsonConvert.SerializeObject(DocumentSession.Query<DataObject>());
return new ContentResult { Content = res, ContentType = "application/json" };
}
Run Code Online (Sandbox Code Playgroud)
一切正常但对我而言似乎效率低下,因为以JSON格式存储在DB中的数据在POCO中序列化,然后再次反序列化.
有没有更直接的方法直接从嵌入式数据库获取json数据?
我使用嵌入式数据库,并想知道对数据进行操作的唯一方法是使用系统数据库吗?我查看了管理工作室,看到我的所有数据都被转储到系统数据库中.即使我在管理工作室内创建了一个新的数据库,这个新的数据库仍未受到影响.使用代码方法我没有进一步深入,因为在嵌入式实例中似乎不支持多租户.那么唯一的方法是存储和访问SYSTEM DATABASE的数据?
谢谢
我想使用RavenDb 4.0.0-beta-40018查询包含动态属性的实体,但我不确定如何操作.
class Foo {
public int Id { get; set; }
public DateTime CreatedAt { get; set; }
public string Name { get; set; }
public dynamic Attributes { get; set; }
}
{
"Attributes": {
"IsFeatured": true
},
"CreatedAt": "2017-08-30T15:53:21.1881668Z",
"Name": "Featured Foo"
}
Run Code Online (Sandbox Code Playgroud)
这是我试图使用的查询.
const string propertyName = "IsFeatured";
var results = session.Query<Foo>()
.Where(x => x.Attributes != null)
.Where(x => x.Attributes[propertyName] != null)
.Where(x => x.Attributes[propertyName] == true);
Run Code Online (Sandbox Code Playgroud)
遗憾的是,我甚至无法编译此代码,因为我收到编译错误(Error: An expression tree may not contain a …