【问题标题】:How to update an entity in Entity Framework?如何更新实体框架中的实体?
【发布时间】:2018-10-02 21:25:10
【问题描述】:

当我更新这个实体时,我得到了这个错误:

我的数据库类与我在视图模型中的类不同

但我转换它。

请帮助我并将正确的代码发送给我。

谢谢

我的错误:

附加类型为“DomainModel.Models.Tbl_Images”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态来跟踪图形,然后将非新实体的状态设置为“未更改”或“已修改”

我的代码:

public bool Update(ImagesEditVM model)
{
        bool result = false;

        try
        {
            DomainModel.Models.Tbl_Images img = new Tbl_Images
            {
                Id = model.Id,
                Code = model.Code,
                Image = model.Image,
                Language = model.Language,
                Title = model.Title
            };

            db.Tbl_Images.Attach(img);
            db.Entry<DomainModel.Models.Tbl_Images>(img).State = EntityState.Modified;
            db.SaveChanges();      

            result = true;
            return result;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
}

【问题讨论】:

    标签: database entity-framework entity-framework-6 entity updates


    【解决方案1】:

    一种方法是先查询图像。然后更新值并显式调用SaveChangesSaveChangesAsync

    try
    {
        var updatingImage = _db.Tbl_Images.FirstOrDefault(i => i.Id == model.Id);
    
        if (updatingImage != null)
        {
            // either manually map those values or use auto mapper.
            updatingImage.Code = model.Code;
            updatingImage.Image = model.Image;
            updatingImage.Language = model.Language;
            updatingImage.Title = model.Title;
    
            _db.Tbl_Images.Update(updatingImage);
            _db.SaveChanges();
        }
        ...
    }
    catch (Exception ex)
    {
        throw new Exception(ex.Message);
    }
    

    【讨论】:

    • 我改变了 db.Tbl_Images.Update(updatingImage);到 db.Tbl_Images.Attach(updatingImage); db.Entry(updatingImage).State = EntityState.Modified;工作吧。谢谢
    【解决方案2】:

    你可以试试这个:

        public bool Update ( ImagesEditVM model )
        {
            bool result = false;
            try
            {
    
                var existing = db.Tbl_Images.Find ( model.Id );
                if ( existing == null )
                {
                    context.Add ( model );
                }
                else
                {
                    db.Entry ( existing ).CurrentValues.SetValues ( model);
                }
    
                context.SaveChanges ( );
    
    
                result = true;
                return result;
            }
            catch ( Exception ex )
            {
                throw new Exception ( ex.Message );
            }
        }
    

    看到这个Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多