问题描述
||
问题是关于方便的代码组织。
我已经将我的POCO类移到了与持久性无关的项目中。我应该将IQueryable代码(这些POCO周围的“业务规则”的一部分,例如用于生成派生的非持久性业务对象)一起移动还是更好地将所有IQueryable代码留在ObjectContext中?
解决方法
在您的评论中,您说:“这意味着持久性独立库可以包含IQueryable表达式,这些表达式在没有持久性层的情况下不是“可执行/不可测试的”。这不是真的。您可以(大多数)与持久性无关的方式测试IQueryable表达式。
例如。:
public IQueryable<Foo> SomeFoos(IQueryable<Foo> foos,string aValue)
{
return from foo in foos
where foo.Bar = aValue
select foo;
}
您可以将其用于L2E:
var f = SomeFoos(myContext,\"Baz\");
您可以使用L2O对其进行测试:
var expected = new Foo { Bar = \"Baz\" };
var notExpected = new Foo { Bar = \"Oops\" };
var input = new [] { expected,notExpected };
var actual = instance.SomeFoos(input.AsQueryable(),\"Baz\");
Assert.AreEqual(actual.First(),expected,\"Should have found expected record.\");
Assert.AreNotEqual(actual.Single(),notExpected,\"Should not have found unexpected record.\");
这是一个虚构的示例,但希望重点很明确:如@Ladislav所述,如何真正构造此结构取决于您。