Генерируется база данных с начальными данными.
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Chair>().HasData( new Chair[] { new Chair {Id = 1, Name = "ПМИ" }, new Chair {Id = 2, Name = "АСОИУ" }, new Chair {Id = 3, Name = "ИЯ" }, new Chair {Id = 4, Name = "СИБ" } }); base.OnModelCreating(modelBuilder); modelBuilder.ApplyConfiguration(new ChairConfiguration()); } } public class ChairConfiguration : IEntityTypeConfiguration<Chair> { public void Configure(EntityTypeBuilder<Chair> builder) { builder.HasKey(c => c.Id); builder.Property(c => c.Name).IsRequired(); } }
Потом в программе считывается файл, где может оказаться, что нет необходимой записи в базе данных, тогда ее туда нужно добавить.
private int GetChairIndex(string chairName) { using (ApplicationContext db = new ApplicationContext()) { if (db.Chairs.Where(c => c.Name == chairName).ToList().Count() == 0) { var chair = new Chair(chairName); db.Chairs.Add(chair); db.SaveChanges(); } return db.Chairs.Where(c => c.Name == chairName).Single().Id; } }
На этом этапе выскакивает исключение из-за повторения ключа (Id). Причем при первом запуске происходит попытка новой записи присвоить Id = 1, при каждом следующем запуске Id увеличивается каким-то магическим образом. В итоге, на пятой попытке происходит успешное добавление. Почему Entity Framework сразу не может понять, какой Id нужно присвоить новой записи?