Mühe (EF6) Ausnahme beim Zugriff auf DbSet (Der angegebene Schlüssel war nicht im Wörterbuch vorhanden)

.net effort entity-framework entity-framework-6 linq

Frage

Dies erweist sich als ein wenig schwer nachzuvollziehen, aber wenn ich Effort zum Testen von Entity Framework 6 benutze, bekomme ich anscheinend eine KeyNotFoundException ("Der angegebene Schlüssel war nicht im Wörterbuch vorhanden") Fehler, wenn ich versuche auf einen der DBSet zuzugreifen Repositories.

Ich habe bemerkt, dass es mit ein oder zwei DbSets im DbContext funktioniert, aber sobald ich anfange, mehrere DbSets zum DbContext hinzuzufügen, erhalte ich den obigen Fehler.

Beispielcode (dies ist eine Vereinfachung meines gesamten Codes, der Fehler scheint zufällig zu sein, wenn ich einige DbSets aus dem DbContext auskommentiere und dann wieder einfüge. Ich habe auch Teilklassen an den Modellen, aber es gelingt ihnen manchmal auch, so scheint es seltsam):

Prüfung

            [Fact]
            public void MyTest()
            {
                var connection = Effort.DbConnectionFactory.CreateTransient();
                var context = new StubDbContext(connection);

                var count = context.Models1.Count();
                Assert.Equal(count, 0);

            }

DBContext- und DbSets-Modelle

    public class StubEntityModelA
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class StubEntityModelB
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class StubEntityModelC
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
    }

    public class StubDbContext : DbContext
    {
        public StubDbContext(DbConnection connection): base(connection, true)
        {
        }
        public virtual DbSet<StubEntityModelA> Models1 { get; set; }
        public virtual DbSet<StubEntityModelB> Models2 { get; set; }
        public virtual DbSet<StubEntityModelC> Models3 { get; set; }
    }

Stack Trace:

   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
   at Effort.Provider.EffortProviderManifest.GetStoreType(TypeUsage edmType)
   at System.Data.Entity.ModelConfiguration.Edm.Services.StructuralTypeMappingGenerator.MapTableColumn(EdmProperty property, String columnName, Boolean isInstancePropertyOnDerivedType)
   at System.Data.Entity.ModelConfiguration.Edm.Services.PropertyMappingGenerator.Generate(EntityType entityType, IEnumerable`1 properties, EntitySetMapping entitySetMapping, MappingFragment entityTypeMappingFragment, IList`1 propertyPath, Boolean createNewColumn)
   at System.Data.Entity.ModelConfiguration.Edm.Services.TableMappingGenerator.Generate(EntityType entityType, DbDatabaseMapping databaseMapping)
   at System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.GenerateEntityTypes(DbDatabaseMapping databaseMapping)
   at System.Data.Entity.ModelConfiguration.Edm.Services.DatabaseMappingGenerator.Generate(EdmModel conceptualModel)
   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.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   at System.Linq.Queryable.Count[TSource](IQueryable`1 source)
   at XXXX.Business.Test.XXXXTests.IXXXXXXMethod.ShouldInsertRecordWhenNoneAlreadyExist() in C:\Workspaces\XXX\XXXXX\XXXXX.Business.Test\XXXXXXTests.cs:line 125

Beliebte Antwort

Ich habe das genaue Problem. Es stellte sich heraus, dass ich in einigen meiner SQL-2014-Datenbanktabellen den geographischen SQL-Datentyp verwendet habe und der Aufwand diesen Datentyp nicht unterstützt. Es ist auch nicht geplant, im Moment Unterstützung hinzuzufügen, was mich verlässt in einer echten Quandry, da ich keinen anderen In-Memory-Datenbank-Provider für EF6 finden kann, der das tut!

Möglicherweise gibt es andere neuere Referenztypenfelder, die nicht unterstützt werden, nicht sicher.



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow