Ошибка, сделав Update

Я работаю в app windows forms, Энтити Фрамеворк, у меня есть ошибка в момент делания Update.

public void Update(T entity)
    {
        //Context.Set<T>().Attach(entity);
        Context.Entry(entity).State = EntityState.Modified;
        TrySaveChanges();
    }

Ошибка: Размещение организации типа 'POS.EntidadesDominio. Имей дело' неудачник, потому что другая организация того же типа, у которого уже есть та же стоимость главного ключа. Это может происходить, когда используется способ 'Присоединять' или устанавливать состояние организации в "Без изменений" или "изменение", если любая организация в графике у них есть фундаментальная стоимость в конфликте. Это может проистекать того, что какие-то организации новые и еще не получили произведенную стоимость ключи базы данных. В этом случае, используйте способ 'Добавлять' или состояние организации 'добавленный', чтобы исследовать график далее, устанавливать состояние не-новых организаций в "Без изменений" или "измененный", как он соответствовал.

Имеет общее как эта конфигурировавший Context

public BaseRepository(PosContext context,
        bool autoDetectChangesEnabled = false,
        bool proxyCreationEnabled = false)
    {
        this.Context = context;
        this.Context.Configuration.AutoDetectChangesEnabled = autoDetectChangesEnabled;
        this.Context.Configuration.ProxyCreationEnabled = proxyCreationEnabled;
    }

Я проверяю, существует ли реестр в db

public class TallaRepository : BaseRepository<Talla>, ITalla<Talla>
{
    public TallaRepository(
        bool autodetectChangesEnabled = false,
        bool proxyCreationEnabled = false) : base(
            new PosContext(),
            autodetectChangesEnabled, proxyCreationEnabled)
    { }

    public bool Existe(int codigo)
    {
        int result = Context.Tallas.Where(x => x.TallaId == codigo).Count();
        if (result == 0)
            return false;
        else
            return true;
    }
}

Согласно этому результату я делаю Update или Поверьте

public void Create(Talla entity)
    {
        if (_tallaRepository.Existe(entity.TallaId))
            _tallaRepository.Update(entity);
        else
            _tallaRepository.Create(entity);
    }

Ошибка это у меня есть в Update, что я это показываю линии наверху

1
задан 06.06.2016, 20:49
2 ответа

Ему удайтесь решить это, сначала я был должен создавать один mГ©todo Exist, который возвращал бы мне организацию (если существует я devuleve организация, и Я Обновляю, и если он null, Поверьте).

public bool Exist(Expression<Func<Talla, bool>> predicate)
    {
        return Context.Tallas.Any(predicate);
    }

Применил segГєn результат Exist

public void Create(Talla entity)
    {
        if(_tallaRepository.Exist(x=>x.TallaId == entity.TallaId))
            _tallaRepository.UpdateTalla(entity);
        else
            _tallaRepository.Create(entity);
    }

UpdateTalla

public void UpdateTalla(Talla entity)
    {
        var local = Context.Set<Talla>()
            .Local
            .FirstOrDefault(x => x.TallaId == entity.TallaId);
        if (local != null)
            Context.Entry(local).State = EntityState.Detached;

        Context.Entry(entity).State = EntityState.Modified;
        TrySaveChanges();
    }

En UpdateTalla, если я не ошибаюсь это убираю от контекста, чтобы мочь обновлять. ВїA, что проистекает, что я это переместил?

2
ответ дан 24.11.2019, 14:13

Считая примером следующую модель

public class Person
{
    public int Id { get; set; } // primary key
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

проверь иметь определено primary key для того, чтобы ты смог реализовывать:

Context.Entry(entity).State = EntityState.Modified;
Context.SaveChanges();

таким образом ты будешь указывать правильно на реестр, который ты хочешь изменить.

0
ответ дан 24.11.2019, 14:13
  • 1
    Если это у меня есть как primary key TallaId –  Pedro Ávila 06.06.2016, 19:56
  • 2
    и ты перемещаешь пару и # 225; такой метр как TallaId? –  RogerByte 06.06.2016, 19:58
  • 3
    Схвати и # 237; он, измените вопрос. –  Pedro Ávila 06.06.2016, 20:12