Последовательность содержит более одного совпадающего элемента - EF Database Initialize - PullRequest
0 голосов
/ 02 ноября 2018

Я работаю в системе, которая генерирует базу данных при инициализации:

public static void initialiseEntityFramework()
{
    using (DbContextentityframework context = new DbContextentityframework())
    {
        context.Database.Initialize(true);
    }
}

но когда он доходит до инициализации, возвращается ошибка:

System.InvalidOperationException: 'Последовательность содержит более одного соответствующий элемент '

Трассировка стека:

at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
   at System.Data.Entity.ModelConfiguration.Configuration.Mapping.ForeignKeyPrimitiveOperations.<>c__DisplayClass4a.<RemoveAllForeignKeyConstraintsForColumn>b__47(ForeignKeyBuilder fk)
   at System.Data.Entity.Utilities.IEnumerableExtensions.Each[T](IEnumerable`1 ts, Action`1 action)
   at System.Data.Entity.ModelConfiguration.Configuration.Mapping.EntityMappingConfiguration.CleanupUnmappedArtifacts(DbDatabaseMapping databaseMapping, EntityType table)
   at System.Data.Entity.ModelConfiguration.Configuration.Mapping.EntityMappingConfiguration.Configure(DbDatabaseMapping databaseMapping, ICollection`1 entitySets, DbProviderManifest providerManifest, EntityType entityType, EntityTypeMapping& entityTypeMapping, Boolean isMappingAnyInheritedProperty, Int32 configurationIndex, Int32 configurationCount, IDictionary`2 commonAnnotations)
   at System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.ConfigureTablesAndConditions(EntityTypeMapping entityTypeMapping, DbDatabaseMapping databaseMapping, ICollection`1 entitySets, DbProviderManifest providerManifest)
   at System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntityTypes(DbDatabaseMapping databaseMapping, ICollection`1 entitySets, DbProviderManifest providerManifest)
   at System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.Configure(DbDatabaseMapping databaseMapping, DbProviderManifest providerManifest)
   at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.LazyInternalContext.MarkDatabaseInitialized()
   at System.Data.Entity.Database.Initialize(Boolean force)

Когда запускается вышеуказанный код context.Database.Initialize(True);, во время инициализации мой отладчик обращается к методу, который запускает более 400 экземпляров применения классов к DBModelBuilder. Кажется, почти все из них в порядке, однако есть несколько случаев, которые вызывают ошибку, которую я вижу. Вот пример такого экземпляра:

        modelBuilder.Entity<Genesis_Core_Meta.@Workers.Sources.@Worker>().Map(m =>
        {
            m.MapInheritedProperties();
            m.ToTable("Worker", "Workers");
        })
            .Property(p => p.ContactId)
            .HasDatabaseGeneratedOption(
                System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity
            );

Где Рабочий класс наследует от Индивидуального класса, который наследует от Contact класса. Каждый из этих классов довольно большой, с множеством свойств и методов.

Мне было интересно, сможет ли кто-нибудь из вышеизложенного сказать, что мне нужно искать в этих классах, чтобы определить причину проблемы?

Я все еще немного сомневаюсь, но надеюсь, что кто-нибудь может помочь!

...