从另一个相同类型的对象更新Entity Framework对象

时间:2013-12-23 10:07:35

标签: c# entity-framework-4

是否有任何方法可以从强类型对象更新对象而不列出每个字段?
让我们考虑以下情况:

    using (var context = new MyDBEntities())
{
     var user = (User)Session["EditedUser"];
     var oldUser = context.Users.FirstOrDefault(o => o.Id == user.Id);
     oldUser.FirstName= user.FirstName;
     oldUser.LastName = user.LastName;
     etc ....
     context.SaveChanges();
}

我还有29个字段,我不愿意每次都写下来。 我正在寻找的应该与此类似

using (var context = new MyDBEntities())
{
     var user = (User)Session["EditedUser"];
     var oldUser = context.Users.FirstOrDefault(o => o.Id == user.Id);
     oldUser=user;
     context.SaveChanges();
}

由于实体的主要密钥违规而无法确定。我想在这里实现的是更新除主键值之外的所有字段。

2 个答案:

答案 0 :(得分:4)

使用附加功能,感谢' Silvermind' 现在我的代码看起来像这样

using (var context = new MyDBEntities())
{
    try
    {
        var user = (User)Session["EditedUser"];
        context.Users.Attach(user);
        context.ObjectStateManager.ChangeObjectState(user, EntityState.Modified);
        context.SaveChanges();
        Session["EditedUser"] = null;
        return "ok";
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}

答案 1 :(得分:1)

我知道,截至本文发布之日,已接受的答案是7岁,因此现在可能采取了不同的方法。我发现了一种适用于此source的替代方法。我发现的另一个注意事项是您必须保存该对象。这是一个对我有用的完整代码示例。事实证明,这确实是无价的,因为我在更新旧/新对象的方法方面做了很多工作,这使它成为真正的一站式服务!

编辑:已修改,以匹配Gert Arnold建议的更简单的格式

    it(`should get book based on user`, () => {
      cy.request({
        url: `/user`,
      }).as('user');

      cy.get('@user').then((userResp) => {
        const user = userResp.body;

        cy.request({
          url: `/user/${user.id}/book`,
        }).as('userBook');

        cy.get('@userBook').then((userBookResp) => {
          cy.log(userBookResp);
        });
      });
    });