POCO的主要优势是这些类可以为您的DTO,所以如果您已经有了自定义的DTO,那么POCO看起来有点多余。但是,还有一些其他的优点可能会对你有价值,也可能没有价值,因为你没有提到单元测试的要求。如果你打算编写单元测试,那么POCO仍然是一条路。由于您不会使用代码优先功能(免责声明:我只使用了4.0 POCO,所以我不会非常熟悉这些代码之间的细微差别,所以您可能不会注意到4.0 POCO和4.1之间的很大差异。两个,但它们似乎差不多 - 基本上我已经在4.0中使用POCO了,并且没有看到任何让我想要更新所有东西来使用4.1的东西)。
此外,根据是否打算对此图层进行单元测试,在使用实体框架时,在实现工作模式库/工作单元时仍然有价值。它用来抽象出数据访问逻辑(上下文),而不是实体本身,并且允许你在单元测试中嘲笑你的上下文。我所做的是为我的上下文复制T4模板并使用它创建界面,然后编辑上下文的T4模板并使其实现该界面并使用IObjectSet<T>
而不是ObjectSet<T>
。因此,而不是:
public class MyEntitiesContext
{
public ObjectSet<MyClass> MyEntities
...
}
我结束了:
public interface IMyEntitiesContext
{
public IObjectSet<MyClass> MyEntities;
}
和
public class MyEntitiesContext : IMyEntitiesContext
{
public IObjectSet<MyClass> MyEntities
...
}
所以我想它真的归结到你是否计划为此编写单元测试层。如果你不会做任何需要嘲笑你的上下文进行测试的事情,那么最简单的方法就是使用4.0 EntityObjects,因为你不打算在你的层之间传递你的实体,所以最简单的方法是实行。如果您打算使用模拟,那么您可能会想使用POCO并实施存储库/工作单元。