Я использую 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, но без удачи, так как не можетнайти сущность