刚刚开始使用 RavenDb,并通过工作室查看数据库中的内容。
添加非常简单的对象后我注意到的一件事是,系统记录当然包括路径中的 HILO/ 吗?
这个记录是什么?我认为它代表实体的标识符?那是对的吗?为什么它甚至可以在工作室中看到?我当然不应该关心并且不会使用这个吗?
我想删除一个属性(其除了我要求帮助的文件,见这里),使用RavenDB工作室(我不小心将它们添加到错误的数据库收集......)。
再次,我被困在语法上。另外 - 我不敢相信直到现在还没有人打算这样做 - 至少强烈的谷歌搜索无法产生任何有用的东西。至少可以说,官方文档在这个主题上也很简洁。旁白:为什么 RavenDB(可能还有其他 NoSQL DB)中的 DDL 如此繁琐?
我尝试了各种版本的
from things as t
update {
delete t.field
}
Run Code Online (Sandbox Code Playgroud)
这些都不起作用,其中一些甚至无法编译。
我是C#和RavenDB的新手,所以请原谅我缺乏理解.
我目前有一个Windows窗体应用程序.在其中一种形式中,我有两个文本框和一个按钮.这两个文本框用作用户名和密码输入,按钮显然在那里,以便用户可以登录.当用户单击该按钮时,将调用一个方法并将两个输入的内容保存在两个字符串变量中.
目前,在我的RavenDB数据库中,我创建了两个用户名和密码示例.
如何正确检查数据库中是否存在用户提供的用户名和密码.
任何帮助都非常感谢.
我有一些我不理解的行为.我正在使用RavenDB,我正在为每个工作单元使用一个会话:当逻辑类调用RavenDB数据访问层(DAL)时,会创建一个新会话.在DAL中,可以调用其他DAL类和方法,但只使用一个会话.
我不明白的部分是在下面的GetMostRecentByStartTime()方法中使用IEnumerable和List之间的区别.在该方法中,使用List就像显示的一样,这是我的输出:
使用List:
关闭会话之前
的请求数:2 关闭会话之前
的请求数:4 关闭会话之前
的请求数:6 关闭会话之前的请求数:7
注意:会话实际上并未在每个时间关闭; 只在最后一次之后.我们只在完成最初调用的DAL方法时关闭会话.
现在,如果我用IEnumerable替换List的每个实例(这是我做的唯一更改),我得到这个输出:
使用IEnumerable:
关闭会话之前
的请求数:2 关闭会话之前
的请求数:3 关闭会话之前
的请求数:4 关闭会话之前的请求数:27
为什么不同?
另一个问题是,当我在我的应用程序中添加新的InstallationSummary对象时,使用IEnumerable方法增加了请求计数.我不明白为什么.当我使用List方法时,即使添加了更多的InstallationSummary对象,请求计数也保持不变.也有人可以解释一下吗?
public IEnumerable<InstallationSummary> GetMostRecentByStartTime(int numberToRetrieve)
{
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
try
{
return ExecuteQuery<IEnumerable<InstallationSummary>>(() =>
{
List<InstallationSummary> installationSummaries =
QueryAndCacheEtags(session => session.Advanced.LuceneQuery<InstallationSummary>()
.Include(x => x.ApplicationServerId)
.Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId)
.Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId)
.OrderByDescending(summary => summary.InstallationStart)
.Take(numberToRetrieve)).Cast<InstallationSummary>().ToList();
List<string> appServerIds = (from item in installationSummaries select item.ApplicationServerId).ToList();
List<string> appIds = (from item in installationSummaries select item.ApplicationWithOverrideVariableGroup.ApplicationId).ToList();
List<string> …Run Code Online (Sandbox Code Playgroud) 在我开始之前,让我说我是RavenDB的新手.
我现在正在评估它,并且正在使用RavenDB-Build-616版本.我有服务器正在运行,即我已手动启动"Raven.Server.exe",并具有以下测试代码
public class RavenFullTextSearchDemo
{
private DocumentStore documentStore;
private List<string> firstNames = new List<string>() { "John", "Peter", "Paul", "Sam", "Brendon" };
private List<string> lastNames = new List<string>() { "Simons", "Black", "Benson", "Jones", "Breckwell" };
private Random rand = new Random();
public RavenFullTextSearchDemo(DocumentStore documentStore)
{
this.documentStore = documentStore;
}
public void Run()
{
IndexCreation.CreateIndexes(typeof(RavenFullTextSearchDemo).Assembly, this.documentStore);
using (IDocumentSession session = documentStore.OpenSession())
{
//add some random Users
for (int i = 0; i < 5; i++)
{
string name = string.Format("{0} {1},", …Run Code Online (Sandbox Code Playgroud) 所有...
我正在使用RavenDB嵌入式,使用NuGet和MVC 3进行最新的稳定构建.
public JsonResult GetStudents(GridFilter filter)
{
using (var session = _store.OpenSession())
{
var students = session.Query<Student>();
students.OrderBy(x => x.FirstName);
return Json(students.ToList());
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码不会破坏.它也不会对Student.FirstName进行排序.我查看了RavenQueryInspector(将鼠标放在学生集合上)并找到了以下内容......
AsyncDatabaseCommands = '(((Raven.Client.Linq.RavenQueryInspector<UMA.KendoGrid.Entities.Student>)(students))).AsyncDatabaseCommands' threw an exception of type 'System.NotSupportedException'
Run Code Online (Sandbox Code Playgroud)
如果我做
var students = from x in session.Query<Student>()
orderby x.FirstName descending
select x;
Run Code Online (Sandbox Code Playgroud)
工作正常.首先,我不明白为什么在使用long linq语法时使用lambda会失败.我真正需要的是过滤任何领域的学生,因为我正在使用具有排序能力的网格.我想使用Microsoft的System.Linq.Dynamic文件按字符串名称排序,这样我可以按排序集合中传递的任何字段进行排序.
但是,要开始,我想我需要弄清楚为什么我的RavenDB嵌入式版本不允许我使用lambda表达式.有人可以帮忙吗?
在RavenDB站点上,它显示"当您知道文档ID时使用加载查询".在我对大约1,500个对象的简单集合的测试中,Load总是较慢.为什么?
加载:
var doc = session.Load<Document>("Documents/123");
Run Code Online (Sandbox Code Playgroud)
询问
var doc = session.Query<Document>().Where(x => x.Id == "123").SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
在测试中,检索每个文档,平均查询时间为66毫秒,而负载为137.RavenDB实例位于另一个办公室,因此时间很长.无论加载不总是更快?
编辑
这是我所说的http://ravendb.net/kb/31/my-10-tips-and-tricks-with-ravendb.提示#4.这是错的吗?
我正在尝试编写一个包含获取当前文档ID的Collection的补丁,我试图测试它以查看RavenDB Studio Patch区域中的输出,该区域可以很好地显示之前和之后.我无法理解为什么我的脚本没有像我期望的那样工作,我设法将它缩小到这个小块:
this.TestId = this.__document_id
Run Code Online (Sandbox Code Playgroud)
在运行测试时我的文档输出是:
TestId: null
Run Code Online (Sandbox Code Playgroud)
但我可以看到文件ID是users/1234.有没有人知道在RavenDB Studio使用的JavaScript中拉出文档Id的正确语法?
RavenDB版本:#2230
我正在做一个项目.我有以下模型
public class RegistrantClass : IRavenEntity
{
public RegistrantClass()
{
RegistrantId = new List<string>();
}
public int Id { get; set; }
public IList<String> RegistrantId { get; set; }
public String ClassId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我定义了以下索引
store.DatabaseCommands.PutIndex("RegistrantClass/ClassByStudents",
new IndexDefinitionBuilder<RegistrantClass>
{
Map = students => from i in students
from j in i.RegistrantId
select new { j }
});
Run Code Online (Sandbox Code Playgroud)
我试着像这样查询上面的索引
public object GetMapping(string registrantId)
{
var mapping = _session.Query<RegistrantClass>("RegistrantClass/ClassByStudents")
.Customize(i => i.Include<RegistrantClass>(k => k.RegistrantId))
.Customize(i => i.Include<RegistrantClass>(k => k.ClassId)) …Run Code Online (Sandbox Code Playgroud) 我有一个用Dynamic Linq构建的表达式,用于查询RavenDb.我希望能够查看生成的Lucene查询,以便我可以评估它是否具有高性能.我在这里看到了RavenDB控制台的提及,但我试图在单元测试中获取查询,其中db在内存中.有没有办法为下面的过滤器生成Lucene查询?
var filteredPersons = persons.AsQueryable().Where(expression);
Run Code Online (Sandbox Code Playgroud)
谢谢!
ravendb ×10
c# ×4
linq ×3
asp.net ×2
asp.net-mvc ×1
ienumerable ×1
lambda ×1
lucene ×1
passwords ×1
username ×1