实体框架:POCO和IQueryable代码的封装

问题描述

|| 问题是关于方便的代码组织。 我已经将我的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所述,如何真正构造此结构取决于您。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...