首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于WCF和集成测试的RavenDb会话管理

用于WCF和集成测试的RavenDb会话管理
EN

Stack Overflow用户
提问于 2012-01-31 13:42:35
回答 2查看 1.2K关注 0票数 2

简单地说,我有一个管理苹果的WCF服务。除了其他功能外,它还有两种方法来添加和删除存储中的苹果。我正在写一个集成测试,以检查是否有人得到了这份工作的优势和挑剔苹果。Raven DB在我的WCF服务中有一个审计角色,它只记录动作和苹果。在WCF服务的方法中,还有一些其他的处理:清洁、验证、包装等。

我的审计集成测试可以表示为

  • 空存储器(RavenDB内存模式)
  • Bob来了,并放置了10个苹果(开放会话,添加,处理会话)
  • 杰克来了,拿走了4个苹果(开放会话,删除,处理会话)
  • 检查剩下的6个苹果

由于它们是两个不同的人(两个WCF调用),所以使用不同的会话实例是有意义的。但是,对于Raven DB,我得到了

异常

Apple与会话无关,无法删除未知实体实例

如果我现在运行类似的集成测试,两个不同的人只是在存储中添加苹果,那么总的存储内容就符合事实。这是一个令人困惑的地方:跨会话添加工作,删除不起作用。在这个职位中,Ayende说,会话微观管理并不是一条路,但在我看来,在集成测试中使用不同的会话是很自然的。希望用苹果来比喻并不会让你气馁。

问题:如何在与RavenDB集成测试中使用会话?

示例代码(来自记事本)

代码语言:javascript
复制
public void Remove(Apple apple)
{
    using (var session = Store.OpenSession())
    {
        session.Delete(apple);
        session.SaveChanges();      
    }
}

public void Add(Apple apple)
{
    using (var session = Store.OpenSession())
    {
        session.Store(apple);
        session.SaveChanges();      
    }
}

...

var apples = new apples[10];
//init
MyRavenDB.Add(apples);
MyRavenDB.Remove(apples.Take(4)); //throws here
//verify
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-31 13:53:40

在RavenDB,“会话管理它已加载或存储的所有实体的更改跟踪”.

我怀疑您正在传递给Apple方法的Remove()引用,不是源自RavenDB文档存储,因此出现了错误。

试试这个:

代码语言:javascript
复制
public void Remove(Apple apple)
{
    using (var session = Store.OpenSession())
    {
        var entity = session.Load<Apple>(apple.Id);

        session.Delete(entity);
        session.SaveChanges();      
    }
}
票数 3
EN

Stack Overflow用户

发布于 2012-01-31 17:42:13

你是通过线路通过实体,这通常是一个大的不-不。这样做吧:

代码语言:javascript
复制
 public void Remove(string appleId)

这样你就能学得更好了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9080501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档