标签: ravendb

使用RavenDB会话将Ninject问题绑定到MVC3中的常量值

我已经看到了许多使用ASP.NET MVC配置Ninject的不同方法,但是随着MVC框架的每个版本的发布,实现似乎都有所改变.我正在尝试将RavenDB会话注入我的存储库.这就是我所拥有的几乎可以工作的东西.

public class MvcApplication : NinjectHttpApplication
{
    ...

    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new MyNinjectModule());
    }

    public static IDocumentSession CurrentSession
    {
        get { return (IDocumentSession)HttpContext.Current.Items[RavenSessionKey]; }
    }
    ...
}

public class MyNinjectModule : NinjectModule
{
    public override void Load()
    {
        Bind<IUserRepository>().To<UserRepository>();
        Bind<IDocumentSession>().ToConstant(MvcApplication.CurrentSession);
    }
}
Run Code Online (Sandbox Code Playgroud)

当它尝试解析IDocumentSession时,我收到以下错误.

Error activating IDocumentSession using binding from IDocumentSession to constant value
Provider returned null.
Activation path:
  3) Injection of dependency IDocumentSession into parameter …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc ninject ravendb

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

RavenDB Embedded:磁盘上存储的数据在哪里?

当使用EmbeddableDocumentStore对RavenDB,在什么地方得到的数据存储在磁盘上

var documentStore = new EmbeddableDocumentStore { DataDirectory = "TestApp" };
Run Code Online (Sandbox Code Playgroud)

DataDirectory和磁盘位置之间是否存在关联?

更新:使用截至2011-08-09的最新版本.它是一个控制台应用程序,所以没有ASP.NET目录.

c# embedded-database ravendb

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

RavenDB:将文档属性转换为另一种类型

我正在开发一个应用程序,我在前进时会更改文档(一个小项目来学习像RavenDB这样的东西).某些更改不向后兼容,这会在我尝试获取文档时导致JSON反序列化失败.

在反序列化过程中,是否有某种方法可以将属性从旧类型转换为新类型?我Raven.Client.Lightweight用作客户端库.

例:

我有一个AllProperties在一个类中命名的属性Dictionary<string,string>.我将类型从字典更改为名为的类MetadataItemCollection.

c# ravendb

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

在RavenDb中增加文档属性

我希望能够直接在文档存储中的文档上递增属性(如果你喜欢的话),而不必加载文档,增加属性然后再次保存,因为我最终会遇到竞争条件.

你似乎可以用Redis之类的东西做到这一点,我只是想知道Raven中是否有一些高级命令可以实现这一目标?

如果没有人能够想到一种雄辩的方法来实现这一目标吗?请记住,此计数器有可能在同一秒内多次递增,并且无法在内存中完成,然后定期刷新,因为我们处于Web场景中(我想它可以 - 但它会很讨厌).

ravendb

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

ASP.NET WebApi操作筛选器和依赖关系范围

为了在ASP.NET WebApi中刷新对RavenDB的更改,我创建了以下Action Filter:

public class RavenDbUnitOfWorkAttribute : ActionFilterAttribute
{
    public Func<IDocumentSession> SessionFactory { get; set; }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        var session = SessionFactory.Invoke();

        if (session != null && actionExecutedContext.Exception == null)
        {
            session.SaveChanges();
        }

        base.OnActionExecuted(actionExecutedContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

为了注入,IDocumentSession我创建了一个IFilterProvider循环遍历每个过滤器的自定义,并使用setter注入(StructureMap)设置任何依赖项.

我想知道IFilterProvider作用域的实例.阅读这篇文章,看起来每个请求都会创建控制器.

目前,我正在IDocumentSession使用StructureMap 明确确定每个请求的范围.问题是,如果我依赖IDependencyScope(使用嵌套容器)将相同的实例IDocumentSession注入我的Action Filter?

[更新]

进一步测试似乎Action Filters不使用与Controller相同的依赖范围.我宁愿不在控制器中使用代码来刷新会话.

structuremap ravendb asp.net-web-api

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

为什么要在raven db中创建自定义索引?

我已经开始使用RavenDb,我注意到RavenDb服务器根据我的查询创建自定义索引.如果我多次使用相同的索引(执行相同的查询),那么将永久创建索引.

我的问题是,为什么我想从ny代码创建一个自定义索引,如果Raven是聪明的,我应该为我创建这些索引?

ravendb

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

RavenDB推送通知:未包含实际文件?

我已经使用RavenDB 成功实现了推送通知(参见下面的代码).我期待实际文档包含在更改通知中.这样,所有UI客户端都可以显示信息.但是,似乎只有Id和Etag属性可用于更改的文档.

如果我希望客户端能够显示有关文档的信息,我该怎么办?客户端现在是否需要进行数据库调用以根据ID获取文档?必须进行数据库调用以获取信息似乎效率低下.但是,应该发生什么?

documentStore.Changes()
    .ForDocumentsStartingWith("LogMessages")
    .Subscribe(change =>
    {
        if (change.Type == DocumentChangeTypes.Put)
        {
            // Fire event so consumers can display document info
            // Uh oh, are change.Id and change.Etag all we have here?
            DatabaseItemAdded(null, new EventArgs<string>(change.Id));
        }
});
Run Code Online (Sandbox Code Playgroud)

ravendb

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

以编程方式创建索引

如何在RavenDB中以编程方式创建索引?

我试着效仿这个例子.

这是我的索引创建者:

public class MyIndex : Raven.Client.Indexes.AbstractIndexCreationTask<MyEntity>
{
    public MyIndex()
    {
        Map = col => col.Select(c => new
        {
            code = c.Code,
            len = c.Code.Length,
            sub = c.Code.Substring(0, 1)
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是来电者:

var store = new Raven.Client.Document.DocumentStore
{
    Url = "http://localhost:8080"
};
store.Initialize();

try
{
    using (var session = store.OpenSession("MyDB"))
    {
        Raven.Client.Indexes.IndexCreation.CreateIndexes(
            typeof(MyIndex).Assembly, store);
    }
}
finally
{
    store.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

索引已创建但不在MyDB中,而是在系统数据库中.

如何在MyDB中创建索引?我创建索引的方式是否正确?

ravendb

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

将NServiceBus安装为依赖于RavenDb的Windows服务

当我们使用/ install标志将NServiceBus 3.3.6端点安装为Windows服务时,它会自动配置对消息队列的Windows服务依赖.

但是,即使我们的NServiceBus端点使用RavenDb进行持久化,安装程序也不会在RavenDb上配置服务依赖性.这意味着当我们的服务器重新启动时,由于以下异常,我们的大多数NServiceBus端点都无法启动:

System.InvalidOperationException: 
The database {name} is currently being loaded, but after 30 seconds, 
this request has been aborted. Please try again later, database loading continues.
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉NServiceBus设置对RavenDb的依赖,或者这是我们必须手动配置的东西,也许是使用INeedToInstallSomething<T>

nservicebus ravendb

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

如何在C#中连接到RavenHQ

我正在尝试连接到ravenHQ,我得到了

https://database-d0sm.ravenhq.com; Database =数据库名称; ApiKey =

但是,如何将其添加到C#中的存储中?

    private static IDocumentStore store = new DocumentStore()
    {
        Urls = new[] { "url" },
        Database = "DatabaseName"
    }.Initialize();
Run Code Online (Sandbox Code Playgroud)

好的,为此,我需要在.net应用程序中降级Ravendb的版本。仅Ravendb 3.5支持api密钥。这就是问题所在。

.net c# ravendb

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