Update entity framework objects

前端 未结 5 1082
伪装坚强ぢ
伪装坚强ぢ 2020-12-08 14:59

I transfer data between the entity framework and the business layer and user layer by using Data Transfer Objects. I do have some doubt, if I retrieve an object which is con

相关标签:
5条回答
  • 2020-12-08 15:23

    This should work for EF 5: https://stackoverflow.com/a/11749716/540802:

    db.Entry(product).State = EntityState.Modified;
    
    0 讨论(0)
  • 2020-12-08 15:29

    The following code will update an EF 4 entity that has been created as a controller parameter in MVC from a strongly typed view:

    It seems the trick is to use the ObjectStateManager to change the state from Added to Modified once the entity has been added to the context.

    MyEntities db = new MyEntities();
    db.Product.AddObject(product);
    db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
    return db.SaveChanges() > 0;
    

    As per @Sean Mills comment if you are using EF5 use:

     ((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Added);
    
    0 讨论(0)
  • 2020-12-08 15:33
    //I am replacing player :)
    public ActionResult ProductEdit(string Id, Product product)
    {
        int IdInt = DecyrptParameter(Id);
        MyEntities db = new MyEntities();
    
        var productToDetach = db.Products.FirstOrDefault(p=> p.Id == IdInt);
        if (product == null)
            throw new Exception("Product already deleted"); //I check if exists, maybe additional check if authorised to edit
        db.Detach(productToDetach);
    
        db.AttachTo("Products", product);
        db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
    
        db.SaveChanges();
        ViewData["Result"] = 1; // successful result
        return View();
    }
    
    0 讨论(0)
  • 2020-12-08 15:41

    an old question, but just in case someone needs a code solution:

    http://www.mikesdotnetting.com/Article/110/ASP.NET-MVC-Entity-Framework-Modifying-One-to-Many-and-Many-to-Many-Relationships

    Example:

    public void EditArticle(
            Article article, string articleTypeId, string[] categoryId) 
    { 
      var id = 0; 
      Article art = de.ArticleSet 
                      .Include("ArticleTypes")
                      .Include("Categories")
                      .Where(a => a.ArticleID == article.ArticleID)
                      .First();
    
      var count = art.Categories.Count;
      for (var i = 0; i < count; i++)
      {
        art.Categories.Remove(art.Categories.ElementAt(i));
        count--;
      }
      foreach (var c in categoryId)
      {
        id = int.Parse(c);
        Category category = de.CategorySet
            .Where(ct => ct.CategoryID == id).First();
        art.Categories.Add(category);
      }
    
      art.Headline = article.Headline;
      art.Abstract = article.Abstract;
      art.Maintext = article.Maintext;
      art.DateAmended = DateTime.Now;
    
      art.ArticleTypesReference.EntityKey = new EntityKey(
                                              "DotnettingEntities.ArticleTypeSet", 
                                              "ArticleTypeID", 
                                              int.Parse(articleTypeId)
                                              );
    
      de.SaveChanges();
    }
    
    0 讨论(0)
  • 2020-12-08 15:46

    You would need to include a primary or alternate key in the DTO, then match that key back to the correct EF entity upon update.

    0 讨论(0)
提交回复
热议问题