代码之家  ›  专栏  ›  技术社区  ›  TheCloudlessSky

EF4更新实体而不首先获取实体

  •  11
  • TheCloudlessSky  · 技术社区  · 15 年前

    我现在这样做:

    var user = context.Users.Single(u => u.Id == 2);
    user.Username = "user.name";
    user.Name = "ABC 123";
    context.SaveChanges();
    

    这是可行的,但是强制选择。因为我知道 Id ,为什么我不能这样做:

    var user = new User();
    user.Id = 2;
    user.Username = "user.name";
    user.Name = "ABC 123";
    context.UpdateObject(user);
    context.SaveChanges();
    

    提前谢谢。

    另外,重要的是 只有

    3 回复  |  直到 15 年前
        1
  •  12
  •   user386740    15 年前

    也许下面的代码可以正常工作。

    var user = new User();
    user.Id = 2;
    context.Users.Attach(user);
    
    user.Username = "user.name";
    user.Name = "ABC 123";
    
    context.SaveChanges();
    
        2
  •  4
  •   Yakimych    15 年前

    您可以通过添加实体并将EntityState更改为Modified(已修改),以某种人为的方式执行此操作:

    var user = new User();
    user.Id = 2;
    user.Username = "user.name";
    user.Name = "ABC 123";
    
    context.AddToUsers(user);
    ObjectStateEntry userEntry = context.ObjectStateManager.GetObjectStateEntry(user);
    userEntry.ChangeState(EntityState.Modified);
    
    context.SaveChanges();
    

    通过这种方式,您将告诉ObjectContext查找Id=2的条目并对其进行更新,而不是向数据库中添加新条目。

        3
  •  -1
  •   Jeroen    15 年前

    你不是一定要选择它来编辑它的数据吗?