Ошибка дублирования ключа при попытке сохранить пустую базу данных MySQL с помощью Entity FrameworkC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Ошибка дублирования ключа при попытке сохранить пустую базу данных MySQL с помощью Entity Framework

Сообщение Гость »


Сейчас я пытаюсь переместить базу данных MySQL с помощью Entity Framework. Для начала я выбираю небольшую таблицу, состоящую всего из 8 строк, но когда я добавляю ее в свой DbContext и сохраняю, возникает ошибка, сообщающая о нарушении дублированного ключа.

Я проверил записи и обнаружил, что все они имеют уникальные идентификаторы (0–7).

Вот мой код:

static void Main(string[] args) { СоздатьБД(); ЗагрузитьПромышленныеГруппы(); } статическая пустота LoadIndustryGroups() { результат вар = RemoteController.OpenDatabase(); вар ig = RemoteController.GetAllIndustryGroups().Result; foreach (группа var в ig) { Console.WriteLine($"{group.industrygroupID} {group.Description} {group.Notes}"); } используя (var context = новый J1939DbContext()) { context.Database.EnsureCreated(); foreach (группа var в ig) { context.Entry(group).State = EntityState.Detached; } context.IndustryGroups.AddRange(ig); пытаться { context.SaveChanges(); } поймать (Исключение ex) { Console.WriteLine(ex); } } } Вот как выглядит мой DbContext:

публичный класс J1939DbContext: DbContext { статическая строка только для чтения ConnectionString = "Сервер=localhost; Идентификатор пользователя=x; Пароль=x; База данных=test_db; Порт=3307"; общественный DbSet IndustryGroups {get; набор; } защищенное переопределение void OnConfiguring (DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); optionsBuilder.EnableSensitiveDataLogging(истина); } защищенное переопределение void OnModelCreating (ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(entity => { entity.HasKey(e => e.industrygroupID); entity.Property(e => e.Notes); entity.Property(e => e.Description); entity.Property(e => e.Revised); }); } } Сообщение об ошибке:

Microsoft.EntityFrameworkCore.DbUpdateException: произошла ошибка при сохранении изменений сущности. Подробности смотрите во внутреннем исключении.

System.InvalidOperationException: экземпляр типа сущности «IndustryGroup» невозможно отследить, поскольку другой экземпляр со значением ключа «{industrygroupID: 2}» уже отслеживается. При присоединении существующих сущностей убедитесь, что присоединен только один экземпляр сущности с заданным значением ключа.

в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.ThrowIdentityConflict (запись InternalEntityEntry) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.IdentityMap`1.Add (ключ TKey, запись InternalEntityEntry, логическое updateDuulate) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.NavigationFixer.KeyPropertyChanged (запись InternalEntityEntry, свойство IProperty, IEnumerable`1, содержащийPrincipalKeys, IEnumerable`1, содержащийForeignKeys, Object oldValue, Object newValue) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.DetectKeyChange (запись InternalEntityEntry, свойство IProperty) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.ChangeDetector.PropertyChanged (запись InternalEntityEntry, IPropertyBase propertyBase, логическое значение setModified) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetProperty(IPPropertyBase propertyBase, значение объекта, логическое значение isMaterialization, логическое значение setModified, логическое значение isCascadeDelete, CurrentValueType valueType) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetStoreGeneratedValue (свойство IProperty, значение объекта, логическое значение setModified) в Microsoft.EntityFrameworkCore.Update.ColumnModification.set_Value (значение объекта) в Pomelo.EntityFrameworkCore.MySql.Update.Internal.MySqlModificationCommand.PropagateResults(RelationalDataReaderrelationalReader) в Pomelo.EntityFrameworkCore.MySql.Update.Internal.MySqlModificationCommandBatch.ConsumeResultSet(Int32 startCommandIndex, средство чтения RelationalDataReader) в Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.Consume (читатель RelationalDataReader) --- Конец внутренней трассировки стека исключений --- в Microsoft.EntityFrameworkCore.Update.AffectedCountModificationCommandBatch.Consume (читатель RelationalDataReader) в Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute (соединение IRelationalConnection) в Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute (командный пакет IEnumerable`1, соединение IRelationalConnection) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges (IList`1 elementsToSave) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(StateManager stateManager, логическое значение AcceptAllChangesOnSuccess) в Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](состояние TState, операция Func`3, Func`3verifySucceeded) в Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(логическое значение AcceptAllChangesOnSuccess) в Microsoft.EntityFrameworkCore.DbContext.SaveChanges(логическое значение AcceptAllChangesOnSuccess) в EfTest.Program.LoadIndustryGroups() в E:\J1939_DB\Source\EfTest\Program.cs:строка 43 Вот как таблицы выглядят в старой базе данных и я проверил, что они загружены правильно:


Изображение


Я попробовал дать им разные идентификаторы (старый идентификатор + 1000), и это действительно сработало. Однако мне не разрешено изменять данные, поэтому это недопустимое решение.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»