簡體   English   中英

如何在實體框架中更新實體?

[英]How to update an entity in Entity Framework?

更新此實體時,出現以下錯誤:

我的數據庫類與我在ViewModel中的類不同

但我將其轉換。

請幫助我,並向我發送正確的代碼。

謝謝

我的錯誤:

附加類型為'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);
        }
}

一種方法是先查詢圖像。 然后更新值並顯式調用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);
}

您可以嘗試以下操作:

    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 );
        }
    }

看到這個鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM