简单地说,我有一个管理苹果的WCF服务。除了其他功能外,它还有两种方法来添加和删除存储中的苹果。我正在写一个集成测试,以检查是否有人得到了这份工作的优势和挑剔苹果。Raven DB在我的WCF服务中有一个审计角色,它只记录动作和苹果。在WCF服务的方法中,还有一些其他的处理:清洁、验证、包装等。
我的审计集成测试可以表示为
由于它们是两个不同的人(两个WCF调用),所以使用不同的会话实例是有意义的。但是,对于Raven DB,我得到了
异常
Apple与会话无关,无法删除未知实体实例
如果我现在运行类似的集成测试,两个不同的人只是在存储中添加苹果,那么总的存储内容就符合事实。这是一个令人困惑的地方:跨会话添加工作,删除不起作用。在这个职位中,Ayende说,会话微观管理并不是一条路,但在我看来,在集成测试中使用不同的会话是很自然的。希望用苹果来比喻并不会让你气馁。
问题:如何在与RavenDB集成测试中使用会话?
示例代码(来自记事本)
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发布于 2012-01-31 13:53:40
在RavenDB,“会话管理它已加载或存储的所有实体的更改跟踪”.
我怀疑您正在传递给Apple方法的Remove()引用,不是源自RavenDB文档存储,因此出现了错误。
试试这个:
public void Remove(Apple apple)
{
using (var session = Store.OpenSession())
{
var entity = session.Load<Apple>(apple.Id);
session.Delete(entity);
session.SaveChanges();
}
}发布于 2012-01-31 17:42:13
你是通过线路通过实体,这通常是一个大的不-不。这样做吧:
public void Remove(string appleId)这样你就能学得更好了。
https://stackoverflow.com/questions/9080501
复制相似问题