实体框架POCO的更改跟踪策略

6
我有一个N-Tier应用程序,其中POCO由服务器端的Entity Framework填充并传输到客户端应用程序。客户端对POCO进行更改或添加新的POCO,然后将它们发送回服务器以存储在数据库中。
如果我使用纯粹的POCO,即没有代理,也没有自跟踪实体,人们通常采取哪些常见方法来解决更改跟踪问题?如果您的服务接收到一组POCO,如何使用Entity Framework知道要执行Add、Update还是Delete操作?
1个回答

6
Entity Framework对这种断开连接的场景没有很好的内置支持。我了解到三个常见选项:
- 使用GraphDiff,一个开源的附加库 - 优点: - 无需在客户端编写更改跟踪代码 - 更新断开的对象图的常见模式 - 在服务器端不需要编写太多代码 - 缺点: - 必须查询数据库并加载实体以检测是否需要添加、更新或删除对象 - 除了EF核心库之外还依赖于第三方库。


  • 手动在服务器端更新对象图 (示例)

    优点

    • 无需在客户端编写更改跟踪代码
    • 除了 EF Core 库之外,不依赖于第三方库


    缺点

    • 必须查询数据库并加载实体以检测是否需要添加、更新或删除对象
    • 没有通用模式,即大多数更新场景需要个别代码
    • 在服务器端需要编写大量代码


  • 为您的对象添加实体状态属性,并通过设置相应的状态来手动跟踪更改(我没有这种方法的示例;我相信,Julie Lerman正在使用并推荐它)

    优点

    • 不需要查询数据库以检测是否需要添加、更新或删除对象
    • 除了EF核心库之外,不依赖于第三方库
    • (可能?)在服务器端通常将跟踪的状态转换为附加实体的实体状态的常见模式


    缺点

    • 需要在客户端编写更改跟踪代码
    • 客户端没有常见的模式,即大多数更改跟踪场景(和客户端类型/UI技术)需要个别的代码

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接