Я создаю API, используя ASP.NET5 и Entity Framework 7.0.0-beta 6, и когда я пытаюсь выполнить различные обновления в нескольких запросах, я получаю это исключение:
"Компания" не может быть отслежена, так как другой экземпляр этого типа с тем же ключом уже отслеживается. Для новых сущностей рассмотрите возможность использования IIdentityGenerator для создания уникальных значений ключа.
Это мой код:
public class MrBellhopContext : DbContext
{
public DbSet<Company> Company { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Company>(entity =>
{
entity.Key(c => c.CompanyId);
entity.Index(c => c.Name);
entity.Property(c => c.CompanyId).ValueGeneratedOnAdd();
});
modelBuilder.UseSqlServerIdentityColumns();
base.OnModelCreating(modelBuilder);
}
}
public class Company
{
public int CompanyId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public short StatusId { get; set; }
}
public class CompanyRepository : ICompanyRepository
{
MrBellhopContext _dbcontext;
public async Task UpdateAsync(Company company)
{
_dbcontext.Update(company);
await _dbcontext.SaveChangesAsync();
}
}
[Route("api/[controller]")]
public class CompanyController : Controller
{
[HttpPut]
public async void UpdateAsync([FromBody] Company company)
{
if ((!ModelState.IsValid) || (company == null))
{
Context.Response.StatusCode = 400;
return;
}
else
{
await _repository.UpdateAsync(company);
}
}
}
Я попытался решить эту проблему, удалив ValueGeneratedOnAdd(), UseSqlServerIdentityColumns() или изменив сопоставление, но если я попытаюсь обновить несколько объектов в нескольких запросах, я получаю исключение :
- Первое требование: обновить CompanyId 8
- Первое требование: обновить CompanyId 9 !! ОШИБКА
Кто-нибудь знает, как решить эту проблему?
[Key]
к свойству первичного ключа, которое в вашем случаеComapnyId
? - person believe me   schedule 13.07.2015