将Entity Framework 4对象与ADO.NET C#POCO实体生成器对象进行比较

时间:2011-03-30 17:03:10

标签: entity-framework-4 poco

我真的有两个问题:

  1. 实体框架实体对象与ADO.NET C#POCO实体之间有什么区别。
  2. 我是否使用下面正确的存储库更新记录?
  3. 如果关闭代码生成,然后添加ADO.NET C# POCO Entity Generator,它会为您的Entity Framework 4对象提供一个很好的类表示。这个想法是(from here):

    The POCO Template can be used to generate persistence ignorant entity types 
    from an Entity Data Model.
    

    但是,这些对象具有对象之间的关系以及返回数据库的链接。例如,您可以从存储库中取出一个,更改它,然后在存储库或工作单元级别保存更改,并将内容保存到数据库中。

    所以我的问题是本机实体框架对象与使用此工具生成的这些POCO之间有什么不同?

    这是我在使用存储库更新记录时的想法。这是错的吗?

    1. 从存储库请求POCO。
    2. 存储库从数据上下文加载记录,为找到的每条记录创建新的POCO,将实体框架对象中的值复制到POCO,并返回新POCO的集合。
    3. 对存储库外的这些POCO进行了更改,然后使用Save(POCO)等方式将POCO提交回存储库。
    4. 存储库从数据库加载匹配的记录,并将POCO属性复制到Entity Framework对象。
    5. 使用存储库对象或工作单元对象调用Save。

2 个答案:

答案 0 :(得分:3)

对于POCO生成器,生成的实体类(例如,Employee,Company等)不是派生自任何特殊类(因此称为Plain Old)。 而在entityobject生成器的情况下,实体类派生自特殊的'EntityObject'类,它提供某些功能。

拥有POCO课程的目的是消除实体的DB特定问题。因此,保持我们的域模型不知道DB /持久性操作。

答案 1 :(得分:1)

POCO意味着您有一个普通的旧CLR类,它不受与持久性相关的特殊构造的污染。实体对象派生自EntityObject类,它们使用许多与实体框架直接相关的类和属性。使用EntityObjects时,您的代码完全依赖于实体框架。

您在存储库中描述的内容在EFv1中用于实现POCO方法。目前,您可以直接使用POCO。 POCO与数据库没有任何关系。在某些情况下,POCO由EF依赖构造动态代理,但这在运行时发生,因此它不会污染您的代码。