标签: ravendb

Esent和Ravendb中的.Net Finalizer Order/Semantics

帮帮我理解 我读过这个

"终结者的执行时间和顺序无法预测或预先确定"

正确?

但是看看RavenDB源代码TransactionStorage.cs,我看到了这一点

~TransactionalStorage()
{
try
{
 Trace.WriteLine(
  "Disposing esent resources from finalizer! You should call TransactionalStorage.Dispose() instead!");
 Api.JetTerm2(instance, TermGrbit.Abrupt);
}
catch (Exception exception)
{
  try
  {
   Trace.WriteLine("Failed to dispose esent instance from finalizer because: " + exception);
   }
   catch
   {
   }
 }
}
Run Code Online (Sandbox Code Playgroud)

API类(属于Managed Esent)可能会使用SafeHandle对本机资源进行处理?

因此,如果我理解正确,可以在TransactionStorage之前完成本机句柄SafeHandle,这可能会产生不良影响,也许为什么Ayende在此处添加了catch all子句?

实际上潜入Esent代码,它不使用SafeHandles.

根据CLR通过C#这是危险的吗?

    internal static class SomeType {  
   [DllImport("Kernel32", CharSet=CharSet.Unicode, EntryPoint="CreateEvent")]  

 // This prototype is not robust  
   private static extern IntPtr CreateEventBad( 
      IntPtr pSecurityAttributes, Boolean manualReset, Boolean initialState, String name);  


 // …
Run Code Online (Sandbox Code Playgroud)

c# clr garbage-collection esent ravendb

1
推荐指数
1
解决办法
1147
查看次数

EventStore和RavenDB持久性JsonReaderException

试图将JOliver的EventStoreRavenDB连接起来并遇到麻烦.我在Raven中创建了一个名为RavenEventStore的新数据库.

以下是我的连线;

return Wireup.Init()
           .UsingRavenPersistence("RavenEventStore")
             .UsingAsynchronousDispatchScheduler()
                .DispatchTo(new DelegateMessageDispatcher(DispatchCommit))
           .Build();
Run Code Online (Sandbox Code Playgroud)

当调用Wireup.Init()时,RavenDb端会发生此异常;

Url:"/ indexes/RavenCommitByDate"Newtonsoft.Json.JsonReaderException:解析值时遇到意外的字符:.第1行,位于1.:Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs中的Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar):位于Newtonsoft.Json.JsonTextReader.ReadInternal的第699行()位于d:\ Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:第4行,位于d:\中的Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader,Type t,JsonConverter propertyConverter)开发\发布\ Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:第10行,位于d:\ Development\Releases\Json中的Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Type objectType)\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:位于c:\ Builds\raven\Raven.Database\Extensions\HttpExtensions.cs中Raven.Database.Extensions.HttpExtensions.ReadJsonObject [T](IHttpContext context)的第118行:第57行在Raven.Database.Server.Responders.Index.Put(IHttpContext conte xt,String index)在c:\ Builds\raven\Raven.Database\Server\Responders\Index.cs:第64行,位于c:\ Builds\raven中的Raven.Database.Server.Responders.Index.Respond(IHttpContext context)\Raven.Database\Server\Responders\Index.cs:位于c:\ Builds\raven\Raven.Database\Server\HttpServer.cs:第477行的Raven.Database.Server.HttpServer.DispatchRequest(IHttpContext ctx)第49行c:\ Builds\raven\Raven.Database\Server\HttpServer.cs中的Raven.Database.Server.HttpServer.HandleActualRequest(IHttpContext ctx):第259行

我也可以在RavenDB日志中看到异常;

Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: . Line 1, position 1.   at Newtonsoft.Json.JsonTextReader.ParseValue(Char currentChar) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:line 699 at Newtonsoft.Json.JsonTextReader.ReadInternal() in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\JsonTextReader.cs:line 499 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, Type t, JsonConverter propertyConverter) in d:\Development\Releases\Json\Working\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 1072 at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType) in …
Run Code Online (Sandbox Code Playgroud)

c# cqrs ravendb event-sourcing event-store

1
推荐指数
1
解决办法
811
查看次数

RavenDB数据库配置

如何配置能够发送过多请求或接收过大响应的RavenDB数据库?

默认情况下,RavenDB不允许可能危及服务器或客户端稳定性的操作,并且RavenDB会话会自动强制执行以下限制:

  1. 如果未指定页面大小值,则结果的长度将限制为128个结果.在服务器端,页面大小有1,024个结果的硬限制.

  2. 每个会话对服务器的远程调用次数限制为30次.

我想在客户端配置DocumentStore/DocumentSession,它会增加页面大小值的限制和每个会话服务器的远程调用次数.

database configuration nosql ravendb

1
推荐指数
1
解决办法
838
查看次数

RavenDb查询简单的地图变换索引

我一直在努力解决这个问题.

我有一个客户端对象(clients/513),如下所示:

{  
  "Risks": [
    {
      "Id": "421eacf0-14e9-4004-ab0b-95d20e976aac",
      "RiskFactor": "ElectricalEquipment",
      "Description": "Should be allowed to play with electronics."
    },
    {
      "Id": "4bbecbe2-acfc-45c3-b87a-3321e1eca95a",
      "RiskFactor": "ViolenceToStaffVerbal",
      "Description": "Tourettes"
    }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个包含以下代码的索引:

地图

from c in docs.Clients
from r in c.Risks
select new { ClientId = c.Id, RiskId = r.Id }
Run Code Online (Sandbox Code Playgroud)

转变

from c in results
from r in c.Risks
select new { ClientId = c.Id, RiskId = r.Id }
Run Code Online (Sandbox Code Playgroud)

认为我理解MAP只是定义了您希望能够搜索的属性.并且TRANSFORM以特定形状返回实际数据.

我想要返回ClientId,RiskId以及其他一些与风险相关的属性,这样我才能做到.As<ViewModel>(),但是当我执行查询时,我似乎得到了一些不一致的结果.(它喜欢改变它返回的结果数量,具体取决于我执行查询的次数,有时是4次,有时是5次).

另外:RiskId过滤似乎返回一个,有时返回多个Risk,id不是指定的Id.

任何帮助将非常感激.

ravendb

1
推荐指数
1
解决办法
401
查看次数

如何获取RavenDB集合/索引的最后写入日期

我想检测集合或索引的最后修改或写入时间。

注意:这在文档级别有效,但是我需要在集合/索引级别。如何通过C#获取RavenDB文档的最后写入日期

ravendb ravendb-http

1
推荐指数
1
解决办法
444
查看次数

RavenDB在8080以外的端口上

我们尝试通过以下命令安装NServiceBus 4.2.0.0和RavenDB: -

    nserviceBus.host.exe -install serviceName="xxxx.Server" -displayname="xxxx.Server" -username="domainName\serviceAccountName" -password="serviceAccountPassword"
Run Code Online (Sandbox Code Playgroud)

NServiceBus似乎安装但RavenDB安装失败 - 注意我们正在尝试在8080以外的端口下安装 - 因此我们放置了这条线: -

    <add name="NServiceBus/Persistence" connectionString="Url = http://localhost:9090" />
Run Code Online (Sandbox Code Playgroud)

...在我们的配置中

我们收到的错误信息是: -

    [1] WARN  NServiceBus.ConfigureRavenPersistence [(null)] <(null)> - Raven could not be contacted. We tried to access Raven using the following url: http://localhost:9090.
Run Code Online (Sandbox Code Playgroud)

如果我离开默认端口(8080),一切都安装正确,但我需要更改端口,因为8080已经在使用

有没有人有任何想法?

nservicebus ravendb

1
推荐指数
1
解决办法
2865
查看次数

如何在RavenDB中查询包含指定类型的嵌套对象的文档

我有一个使用索引的RavenDB查询,我需要添加条件检查嵌套对象的类型(这些对象不是单独的文档)

entries = session.Query<result, index>()
  /* some conditions here */
  .Where(x => x.Messages.Any(m => m.GetType() == typeof(MyMessage)))
  .ToList();
Run Code Online (Sandbox Code Playgroud)

Raven告诉我,他不知道如何翻译GetType。那么我该如何实现呢?

c# ravendb

1
推荐指数
1
解决办法
345
查看次数

将字符串转换为Linq lambda表达式

我们正在RavenDB项目中使用,我们有一个搜索面板,允许用户使用不同的标准搜索文档.以建筑时代为例.这些输入数据是从查询字符串中的Web客户端发送的,我必须将它们翻译成Lucene语法才能得到结果,RavenDB但我认为依赖Raven会更容易Linq提供商为我做这项工作,而不是:

Age_Range : [Ix5 TO NULL]
Run Code Online (Sandbox Code Playgroud)

我可以有 :

b=>b.Age>=5
Run Code Online (Sandbox Code Playgroud)

然后,我所要做的就是将此字符串转换为lambda表达式.

我现在正在做的是编译这样的代码:

public class BuildingQueryBuilderXYZ:IQueryBuilder<Building>
{
     public IRavenQueryable<Building> BuildQuery(IDocumentSession session)
     {
           return session.Query<Building>().Where(b=>b.Age>=5);  
     }
}
Run Code Online (Sandbox Code Playgroud)

它正在工作,但我必须为每个请求编译一个程序集,这不是搜索数据库的有效方法.

如果我能找到将此字符串b=>b.Age>=5转换为lambda表达式的方法,我认为我的问题将得到解决:)

c# linq lucene lambda ravendb

1
推荐指数
1
解决办法
3101
查看次数

为什么将RavenDB与NServiceBus一起使用

我在Pluralsight上观看了NServiceBus简介,演示者使用MSMQ和RavenDB来存储消息.为什么是这样?将消息存储在数据库中有什么好处,而不仅仅是MSMQ?搜索我发现了很多关于如何将RavenDB与NServiceBus一起使用的结果,但不是为什么你应该这样做.

nservicebus ravendb

1
推荐指数
1
解决办法
217
查看次数

用F#在RavenDb中保存记录以添加额外的ID列

保存新的F#记录时,我Id@在RavenDb文档中获得了一个额外的列,当我在代码中加载或查看该对象时会显示该列;它甚至可以通过我的F#API转换为JSON。

这是我的F#记录类型:

type Campaign = { mutable Id : string; name : string; description : string }
Run Code Online (Sandbox Code Playgroud)

我没有做任何令人兴奋的事情来保存它:

let save c : Campaign =
    use session = store.OpenSession()
    session.Store(c)
    session.SaveChanges()
    c
Run Code Online (Sandbox Code Playgroud)

保存记录的新实例将创建ID为的文档campaigns/289。这是RavenDb中文档的全部价值:

{
    "Id@": "campaigns/289",
    "name": "Recreating Id bug",
    "description": "Hello StackOverflow!"
}
Run Code Online (Sandbox Code Playgroud)

现在,当我在C#中使用相同的数据库(和文档)时,我没有获得额外的Id@价值。这是我在C#中保存记录时的样子:

{
    "Description": "Hello StackOverflow!",
    "Name": "Look this worked fine",
}
Run Code Online (Sandbox Code Playgroud)

(此外-“名称”与“名称”表示我的文档中有2个名称列。至少我理解该问题)。

所以我的问题是:在RavenDb中保存F#记录时,如何摆脱Id@正在创建的额外属性?

f# ravendb

1
推荐指数
1
解决办法
99
查看次数