Как обновить сущность в Entity Framework? - PullRequest
0 голосов
/ 03 октября 2018

Когда я обновляю эту сущность, я получаю эту ошибку:

Мой класс для базы данных отличается от моего класса в viewmodel

, но я конвертирую его.

Пожалуйста, помогите мне и пришлите мне правильный код.

Спасибо

Моя ошибка:

Присоединение сущности типа 'DomainModel.Models.Tbl_Images'не удалось, потому что другой объект того же типа уже имеет то же значение первичного ключа.Это может произойти при использовании метода «Присоединить» или установке состояния объекта на «Неизменено» или «Изменено», если какие-либо объекты в графе имеют конфликтующие значения ключей.Это может быть потому, что некоторые объекты являются новыми и еще не получили сгенерированные базой данных значения ключей.В этом случае используйте метод «Добавить» или «Состояние добавленной» сущности для отслеживания графика, а затем установите состояние не новых сущностей на «Неизмененные» или «Измененные» в зависимости от ситуации

Myкод:

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Вы можете попробовать это:

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

см. Ссылка

0 голосов
/ 03 октября 2018

Один из способов - сначала запросить изображение.Затем обновите значения и явно вызовите SaveChanges или SaveChangesAsync.

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