如何在实体框架中更新实体?

时间:2018-10-02 21:25:10

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

当我更新此实体时,出现此错误:

  

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

但我将其转换。

请帮助我,并向我发送正确的代码。

谢谢

我的错误:

  

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

我的代码:

0
1
1

2 个答案:

答案 0 :(得分:0)

一种方法是先查询图像。然后更新值并显式调用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);
}

答案 1 :(得分:0)

您可以尝试以下操作:

    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