我有一个N层应用程序,其中POCO由服务器端的Entity Framework填充并转移到我的客户端应用程序。客户端对POCO进行更改或添加新的POCO,然后将它们发送回服务器以存储在数据库中。

如果我使用的是纯粹的POCO,即没有代理,也没有自我跟踪实体,那么人们在解决变更跟踪问题时会采用哪些常用方法?如果您的服务收到了POCO的集合,它如何知道使用Entity Framework进行添加,更新或删除?

最佳答案

Entity Framework 对于这种断开连接的场景没有很好的内置支持。我知道三个常规选项:

  • 使用GraphDiff(开源插件库)

    的优势
  • 无需在客户端
  • 上编写更改跟踪代码
  • 通用模式,用于更新数据库中的断开连接的对象图
  • 在服务器端
  • 上写的代码很少

    的缺点
  • 必须查询数据库并且必须加载实体以检测是否必须添加,更新或删除对象
  • 除了EF核心库
  • 外,还依赖于第三方库


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

    的优势
  • 无需在客户端
  • 上编写更改跟踪代码
  • 除了EF核心库
  • 外,不依赖第三方库

    的缺点
  • 必须查询数据库并且必须加载实体以检测是否必须添加,更新或删除对象
  • 没有通用模式,即大多数更新方案都需要单独的代码
  • 在服务器端
  • 上写很多代码


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

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

  • 的缺点
  • 更改跟踪代码以在客户端
  • 上编写
  • 客户端上没有通用模式,即大多数变更跟踪方案(和客户端类型/UI技术)都需要单独的代码
  • 关于entity-framework-5 - Entity Framework POCO变更跟踪策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19060309/

    10-16 08:58