DbSet에 액세스 할 때 Effort (EF6) 예외 (지정된 키가 사전에 없음)

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

문제

이것은 추적하기가 힘들지 만 Entity Framework 6 테스트를 위해 Effort를 사용할 때 DBSet 중 하나에 액세스하려고 할 때 KeyNotFoundException ( "주어진 키가 사전에 없습니다") 오류가 발생하는 것 같습니다. 저장소.

DbContext에서 하나 또는 두 개의 DbSets와 함께 작동하는 것으로 나타 났지만 DbContext에 여러 DbSets를 추가하기 시작하면 위의 오류가 발생합니다.

예제 코드 (이것은 코드 전체를 단순화 한 것입니다. DbContext에서 DbSets를 주석 처리하고 다시 넣을 때 오류가 무작위로 나타납니다. 모델의 부분 클래스도 있지만 때로는 여기에서도 성공합니다. 기묘한):

테스트

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

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

            }

DBContext 및 DbSets 모델

    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; }
    }

스택 추적 :

   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

인기 답변

나는 정확한 문제를 겪고있다. 내 SQL 2014 데이터베이스 테이블 중 일부에서 SQL 지리 데이터 형식을 사용하고 있기 때문에 노력 이이 데이터 형식을 지원하지 않기 때문에 그 순간에 지원을 추가 할 계획이 없기 때문에 어느 날 나에게 남겨 둡니다. 나는 EF6를위한 다른 메모리 내장 데이터베이스 제공자를 찾을 수 없기 때문에 진정한 추세에 빠지게됩니다!

잠재적으로 다른 새로운 참조 유형 필드도있을 수 있습니다.이 필드는 지원하지 않으며 확실하지 않습니다.



Related

아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow