Entity Framework Прикрепите в обновлении - PullRequest
0 голосов
/ 28 октября 2019

Я использую Entity Framework с интеграцией Cosmos. Я хочу обновить сущность из API. Это структура:

ApiController -> UnitOfWork -> Generic Repository

Мое определение репозитория выглядит следующим образом:

public interface IRepository<TEntity> where TEntity : Entity
{
    Task CreateAsync(TEntity entity);
    Task<IEnumerable<TEntity>> ReadAsync(Expression<Func<TEntity, bool>> predicate);
    Task<TEntity> UpdateAsync(TEntity entity);
    Task DeleteAsync(TEntity entityId);
}

Как вы, возможно, поняли, у меня нет контекста сущности в реализациирепозиторий.

Метод обновления выглядит следующим образом:

public async Task<TEntity> UpdateAsync(TEntity entity)
{
    _dbContext.Entry(entity).State = EntityState.Modified;
    var updated = _dbContext.Set<TEntity>().Attach(entity);
    return updated.Entity;
}

Из API я не хочу раскрывать первичный ключ по очевидным причинам. Испытание PUT -метода из моего определения чванства приводит к следующему исключению:

Unable to track an entity of type 'MyEntity' because alternate key property 'id' is null. If the alternate key is not used in a relationship, then consider using a unique index instead. Unique indexes may contain nulls, while alternate keys must not

Как и в сообщении об ошибке, я создал уникальный индекс в своем DbContext, например:

modelBuilder.Entity<MyEntity>().HasIndex(p => p.MyProperty).IsUnique();

Но происходит то же исключение.

Как я могу хорошо решить эту проблему, не зная конкретных деталей реализации моих сущностей?

РЕДАКТИРОВАТЬ:

Я также попробовал HasAlternateKey, который связан со свойством, которое выставляется через API, но без удачи, так как не можетнайти сущность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...