实体框架POCO变更跟踪策略

时间:2013-09-27 21:26:19

标签: entity-framework-5 poco

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

如果我使用纯POCO,即没有代理,而不是自我跟踪实体,那么人们采取哪些常见方法来解决变更跟踪问题?如果您的服务收到POCO集合,那么它如何知道使用实体框架进行添加,更新或删除?

1 个答案:

答案 0 :(得分:6)

实体框架对此类断开连接的方案没有良好的内置支持。我知道三个一般选项:

  • 使用GraphDiff,一个开源附加库

    <强>优点

    • 无需在客户端编写更改跟踪代码
    • 更新数据库中断开连接的对象图的通用模式
    • 在服务器端写的代码不多


    缺点

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


  • 在服务器端(Example

    手动更新对象图

    <强>优点

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


    缺点

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


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

    <强>优点

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


    缺点

    • 更改跟踪代码以在客户端写入
    • 客户端没有通用模式,即大多数变更跟踪方案(以及客户端类型/ UI技术)需​​要单独的代码