从存储库中返回POCO对象与EF实体相比有什么优缺点?

lit*_*rva 8 orm entity-framework repository-pattern

按照Rob的方式,我有Linq to SQL向导生成的类,然后是POCO类的副本.在我的存储库中,我返回这些POCO而不是Linq to SQL模型:

return from c in DataContext.Customer
       where c.ID == id
       select new MyPocoModels.Customer { ID = c.ID, Name = c.Name }

我知道这样做的好处是POCO模型可以更容易实例化,这将使我的代码更易于测试.

我现在正在从Linq迁移到SQL到实体框架,我大约只有EF书的一半.通过从我的存储库而不是EF实体返回POCO,我似乎会失去很多好处.

我还没有真正接受单元测试,所以我觉得我浪费了很多时间来创建这些额外的POCO并编写代码来填充它们,当我看起来所有的东西都是可测试的代码时,我也是由于无法跟踪我的物体,因此会失去EF的许多好处.

有没有人对所有这些ORM/Repository东西的相对newb有任何建议?

安东尼

Eri*_*lje 6

人们不喜欢自动生成对象的另一个原因(例如在LINQ to SQL中)是因为它们内置了"魔法".

通常魔法是不可见的,你从来没有注意到它,但是当你尝试做一些事情,比如序列化其中一个对象,然后反序列化它(例如当使用Web服务时)它与数据源的内部连接被打破,并且需要特殊的黑客攻击被雇用来"把魔法放回去".

使用POCO,您不必担心这些问题,并且可以更好地分离数据和服务层.当然,缺点是你必须写出许多无聊的POCO - >魔术对象和魔法对象 - > POCO转换代码.但最后我认为这通常是值得的,特别是对于大型或复杂的项目.