更新对象图时,实体框架断开的行为(Disconnected Behavior of Entity F

2019-07-30 00:14发布

我目前正在与使用下列技术的一个项目工作。

  1. ASP.net MVC - 表现层
  2. 数据服务层 - (WCF)
  3. 数据传输对象(DTO)与自动映射图层
  4. 领域层(POCO,代码第一次实体框架)
  5. 库层+实体框架4.3 +的DbContext。

我们使用的DTO转换域对象使用自动映射器反之亦然,通过使用WCF服务发送到前端。

此外,我们正在创建基于每个请求的DbContext在WCF层为每个请求和我们的WCF服务上下文由每呼叫并没有跟踪构造能够在客户端的DTO,这是完全断开。

此外,我们有如下的对象图。

public class User : BaseEntity
    {
        public virtual Identity Identity { get; set; }

        public string UserName { get; set; }

        public string Password { get; set; }

        public int IdentityId { get; set; }

        public virtual IList<Group> Groups{ get; set; }
    }



 public class Identity : BaseEntity
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public virtual IList<Email> Emails { get; set; }

        public virtual IList<PhoneNumber> PhoneNumbers { get; set; }
    }

相比于我们的域结构DTO更像是一样的。

我的问题:

当涉及到更新对象图,例如:UpdateUser两个(用户用户); 什么是实体框架的最佳方法?

现在我们用单一的功能来保存资料导航EX:UpdateEmail(用户ID,电子邮件)(仅保存原始数据没有关系); 所以这让很多在数据库中插入和更新时,我们考虑一个的UnitOfWork的。

当前实现如下

  public void UpdateUser(User user)
    {
    UpdateEmail(user.userId, user.Idenity.Emails);
    UpdatePhone(user.userId, user.Identity.PhoneNumbers);

    etc.............

    UpdateUser(user);
    UnitOfWork.Commit();// Calling DbContext.SaveChanges();
    }

有没有办法,我们就可以在上述情况与实体框架使用与断开连接的对象图中的任何模式或最佳实践?

Answer 1:

不会有太多的选项来解决它。 EF没有任何直接支承实更新断开连接的对象图吨。 你必须编写你的更新逻辑,一般有两种方法怎么办呢:

  • 当您收到服务请求更新的用户,你将调用数据库,并获取当前数据库状态=用户与所有受影响的关系。 您将使用的数据库版本和更新版本建立在年底EF设定将更新,插入和删除,只对已经真正改变数据的有效变化。
  • 您将修改您的DTO的运输状态,而且您的客户端将负责设置他做的DTO修改的类型。 您将使用这些信息来正确地配置ChangeTracker为每一个接收到的实体。


Answer 2:

朱莉·勒曼在解释了这个很好的一些视频的



Answer 3:

现在您的问题,您使用EF,这让很多更新的呼叫? 我没有看到周围,这里的方式你的电话号码和电子邮件是不同的表。 你可以创建一个包含每地图的前五到您插入一个进程的用户扁平实体。 这将减少电话,但不能干净恕我直言。 如果你是在一次话,也许分手处理许多用户UOW每个用户只作用让你拥有更短的事务。 是否有目前性能问题或只是一个未来的担忧? -

没有压扁你是没有什么不同的场景的比没有使用EF。 我不明白为什么想到,因为你正在使用DDD你不能介绍具体的数据mappings.Your实体的实体仍然可以使用,你只是除了有映射一个新的实体。 事实上,你可以做到这一点没有在你的仓库后实体(资料库查询更改的对象,变平,并发送至数据访问层调用PROC)



文章来源: Disconnected Behavior of Entity Framework when Updating Object Graph