Bu, izlenmesi biraz zor olduğunu kanıtlıyor, ancak Entity Framework 6 test için Çaba kullanırken, bir KeyNotFoundException alıyor gibi görünüyor DBSet depolarından birine erişmeye çalışırken ("Verilen anahtar sözlükte mevcut değildi") hatası.DbSet'e erişirken çaba (EF6) istisnası (Verilen anahtar sözlüğünde mevcut değildi)
DbContext'te bir veya iki DbSet ile çalıştığını fark ettim, ancak DbContext'e birden çok DbSet eklemeye başladığımda, yukarıdaki hatayı alıyorum.
Örnek kod (bu, tüm kodun bir basitleştirilmesidir, DbSontext'ten bazı DbSet'leri açıkladığımda ve daha sonra da tekrar yerleştirdiğimde hata rastgele görünüyor. Ayrıca modellerde kısmi sınıflar var, ancak bazen bunları başarılı oluyor Ayrıca, bu yüzden) garip görünüyor:
Testi
[Fact]
public void MyTest()
{
var connection = Effort.DbConnectionFactory.CreateTransient();
var context = new StubDbContext(connection);
var count = context.Models1.Count();
Assert.Equal(count, 0);
}
DBContext ve DbSets Modelleri
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; }
}
Yığın İzleme:
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
Bu konuda herhangi bir çözünürlüğe ulaştınız mı? Ben aynı tür bir sorunla karşılaşıyorum – jth41
Burada yeni bir sorum var: http://stackoverflow.com/questions/35236919/entity-framework-6-runtime-error-given-key-was-not-present- in-the-sözlük – jth41
Merhaba jth41, hayır, ben benim durum testlerimi değiştirmek yerine Moq ve DbContext etrafında bir adaptör kullanarak kendi özel SaveChanges yöntemleri için durum yerine kontrol edin. Sadece yüklü bir SQL Server örneği yerine bir bellek içi veritabanı kullanan Effort kullanırken bu sorunu fark ettim. –