gpt4 book ai didi

asp.net-mvc-3 - 更新对象图时 Entity Framework 的断开行为

转载 作者:行者123 更新时间:2023-12-02 05:34:05 24 4
gpt4 key购买 nike

我目前正在处理一个使用以下技术的项目。

  • ASP.net MVC - 表示层
  • 数据服务层 - (WCF)
  • 带自动映射器的数据传输对象 (DTO) 层
  • 域层(POCO,代码优先 Entity Framework )
  • 存储库层 + Entity Framework 4.3 + DbContext。

  • 我们使用 DTO 使用自动映射器将域对象进行反向转换,并使用 WCF 服务发送到前端。

    此外,我们正在为每个请求在 WCF 层中创建基于每个请求的 DBContext,我们的 WCF 服务上下文由客户端 DTO 中的 Per Call 和 No Tracking enable 构建,并且完全断开连接。

    我们还有以下对象图。
    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 结构更像是相同的。

    我的问题:

    更新对象图例如: 更新用户(用户用户) ; Entity Framework 的最佳方法是什么?

    现在我们使用单个函数来保存导航数据,例如: UpdateEmail(userId, Email) (只保存原始数据不保存关系);因此,当我们考虑一个 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();
    }

    在上述具有断开对象图的情况下,是否有任何模式或最佳实践可以与 Entity Framework 一起使用?

    最佳答案

    没有多少选项可以解决它。 EF doesn't have any direct suppor t 用于更新断开连接的对象图。您必须编写更新逻辑,通常有两种方法可以做到:

  • 当您从服务请求收到更新的用户时,您将调用数据库并获取当前数据库状态 = 用户以及所有受影响的关系。您将使用数据库版本和更新版本来构建有效的更改集,因此最后 EF 将仅更新、插入和删除真正更改的数据。
  • 您还将修改您的 DTO 以传输状态,您的客户将负责设置他在 DTO 上所做的修改类型。您将使用此信息正确配置 ChangeTracker对于每个接收到的实体。
  • 关于asp.net-mvc-3 - 更新对象图时 Entity Framework 的断开行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078126/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com