问题在于方便的代码组织。
我已将POCO课程移至持久性独立项目。我是否应该将IQueryable代码("业务规则"围绕这些POCO的一部分,用于生成派生的非持久性业务对象)放在一起或更好地将所有IQueryable代码保留在带有ObjectContext的库中?
答案 0 :(得分:2)
在你的评论中,你说,“这意味着持久性独立库可以包含IQueryable表达式,这些表达式”不可执行/可测试“而没有持久层......”。这不是真的。您可以(主要)与持久性无关的方式测试IQueryable表达式。
E.g:
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所说,你如何构建这个问题真的取决于你。