我有一个包含"标签"列表的文档类.就像是:
class Item {
string Name { get; set; }
List<string> Tags {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在我想为RavenDB创建一个查询,它将所有按标签列表过滤的项目交给我.使用实体框架时,我设法通过以下方式执行此操作:
var query = GetQueryable();
foreach (var tag in tags)
{
query = query.Where(i => i.Tags.Contains(tag));
}
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不适用于RavenDB,很可能是因为不支持Contains ..我也尝试使用Any,(Where(i => i.Tags.Any(t=>t == tag)))重写它但是这给了我一个奇怪的例外:
Unable to cast object of type
'System.Linq.Expressions.PrimitiveParameterExpression`1[System.String]'
to type 'System.Linq.Expressions.MemberExpression
Run Code Online (Sandbox Code Playgroud)
有什么好主意吗?我这样做完全错了吗?
更具体地说,在Raven DB中,我想创建一个带有签名的泛型方法;
public void Clear<T>() {...
Run Code Online (Sandbox Code Playgroud)
然后让Raven DB清除给定类型的所有文档.
我从Ayende的其他帖子中了解到类似的问题,你需要一个索引就可以批量执行此操作.
我认为这将涉及创建一个映射每种文档类型的索引 - 这看起来像很多工作.
有没有人知道创建一个像上面那样直接在数据库中进行集删除的方法的有效方法?
我有一个文档模型存储在RavenDB中,但我不想存储计算属性.如何告诉RavenDB忽略此属性?
在下面的例子中,我不想存储Duration.
public class Build
{
public string Id { get; set; }
public string Name { get; set; }
public DateTime StartedAt { get; set; }
public DateTime FinishedAt { get; set; }
public TimeSpan Duration { get { return StartedAt.Subtract(FinishedAt); }}
}
Run Code Online (Sandbox Code Playgroud) 使用SimpleMembership(ASP.NET MVC 4)与RavenDB(或其他数据库)而不是SQL Server的必要步骤是什么?
我习惯于覆盖MembershipProvider,但它如何与新的SimpleMembership一起使用?
我看到有一个SimpleMembershipProvider所以我认为我应该覆盖它,但我不知道这些方法是仅用于存储数据目的还是它们应该包含业务/验证逻辑)...
配置怎么样?我知道InitializeDatabaseConnection方法通常负责初始化整个shebang,但如果我不使用Entity Framework,我认为不应该调用它.
不幸的是,除了两个不太有用的链接之外,我没有找到关于新SimpleMembership的大量资源:
http://igambin.blogspot.ca/2012/08/simplemembershipprovider-huh.html
http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx
如果我想保存一个我要保存的项目列表,其数量> 30,我会收到错误消息
已达到此会话允许的最大请求数(30).Raven限制允许会话作为早期预警系统进行的远程调用的数量.会话预计会很短暂,并且Raven提供了诸如Load(string []键)之类的工具来一次加载多个文档并批量保存.
我该怎么做才能解决这个问题?这个错误的问题是我没有加载,我正在尝试保存文档.任何想法,将不胜感激.谢谢
我正在玩Raven DB,我想知道是否可以使用Raven Management Studio连接到嵌入式数据库.有没有人这样做过?
只需使用MVC 3 RC2和RavenDB构建一个快速,简单的站点来测试一些东西.
我已经能够制作一堆项目,但我很好奇Html.ActionLink()如何处理乌鸦数据库ID.
我的例子:我有一个名为"reason"的文档(一个事情的原因,主要是文本),它有原因文本和链接列表.我可以通过我的存储库添加,删除和完成其他所有操作.
下面是我的剃刀视图的一部分,它列出了项目符号列表中的每个原因,并将编辑链接作为第一个文本:
@foreach(var Reason in ViewBag.ReasonsList)
{
<li>@Html.ActionLink("Edit", "Reasons", "Edit", new { id = Reason.Id }, null) @Reason.ReasonText</li>
<ul>
@foreach (var reasonlink in Reason.ReasonLinks)
{
<li><a href="@reasonlink.URL">@reasonlink.URL</a></li>
}
</ul>
}
Run Code Online (Sandbox Code Playgroud)
问题
除编辑链接外,此方法正常.虽然这里的值和代码似乎直接起作用(即链接直接触发),但RavenDB将我的文档ID保存为"reason/1".
因此,当URL发生并且它传递ID时,结果路由是"http:// localhost:4976/Reasons/Edit/reasons/2".因此,ID被正确附加,但MVC将其解释为自己的路由.
关于我如何能够解决这个问题的任何建议?我是否需要创建一个特殊的路线来处理它或者我还能做些什么吗?
我正在使用RavenDB作为应用程序的数据存储的想法,该应用程序很可能具有HTML UI,WebService UI和将访问数据的服务器实用程序.使用RavenDB的一个原因是它通过复制和分片提供的水平扩展.但是,似乎有几个关于将Raven作为Windows服务运行或通过IIS运行的考虑因素.
EDITED
我可以理解使用Raven的嵌入式配置,如果您拥有的只是一个Web客户端,但是当您拥有多个不同的客户端时,Raven的API需要独立公开以防止单个客户端锁定数据文件.
遵循RavenDB的文档后
http://ravendb.net/docs/article-page/2.5/csharp/samples/raven-tests/createraventests
我无法成功通过内存文档存储的创建来运行单元测试.我使用RavenDB的RavenTestBase复制并粘贴了上面文档中的测试样本.
[TestClass]
public class IndexTest : RavenTestBase
{
[TestMethod]
public void CanIndexAndQuery()
{
using (var store = NewDocumentStore())
{
new SampleData_Index().Execute(store);
using (var session = store.OpenSession())
{
session.Store(new SampleData
{
Name = "RavenDB"
});
session.SaveChanges();
}
using (var session = store.OpenSession())
{
var result = session.Query<SampleData, SampleData_Index>()
.Customize(customization => customization.WaitForNonStaleResultsAsOfNow())
.FirstOrDefault();
Assert.Equals(result.Name, "RavenDB");
}
}
}
}
public class SampleData
{
public string Name { get; set; }
}
public class SampleData_Index : AbstractIndexCreationTask<SampleData>
{
public SampleData_Index()
{ …Run Code Online (Sandbox Code Playgroud) ravendb ×10
c# ×3
linq ×2
actionlink ×1
architecture ×1
asp.net ×1
asp.net-mvc ×1
unit-testing ×1