3

this tutorial의 Scott-Guthrie와 Scott Hanselman의 Code-First와 같은 Entity Framework CTP를 사용했습니다 (링크를 게시 할 수는 없지만 Google의 "Simple Code First Entity Framework 4 - Magic Unicorn 기능 CTP 4 "). 이것은 주요 MVC 응용 프로그램에 완벽하게 작동하지만 이제는 별도의 SQL CE 데이터베이스를 사용하는 테스트 프로젝트를 추가하려고합니다. 그러나코드 - 첫 번째 엔터티 프레임 워크 - SQL CE 데이터베이스 생성 오류

<connectionStrings> 
    <add name="MyData" 
     connectionString="Data Source=D:\myProject\myDb.sdf;" 
     providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings> 

나는 그것이 데이터베이스 만들려고 다음과 같은 오류가 발생합니다 테스트를 실행하려고 :

테스트를

나는하여 app.config 파일에 다음을 추가 한 메서드 MyProjet.Tests.Administration.ModlelTests.Business.TestGetBusinessesList 던져 예외 : System.Reflection.TargetInvocationException : 에 의해 예외가 throw되었습니다.호출 대상입니다. ---> System.TypeInitializationException : 의 형식 이니셜 라이저 'System.Data.SqlServerCe.SqlCeProviderServices' 이 예외를 Throw했습니다. ---> System.Security.VerificationException : 작업으로 인해 런타임이 불안정해질 수 있습니다. 다음 스택 트레이스

:

System.Data.SqlServerCe.SqlCeProviderServices..ctor() System.Data.SqlServerCe.SqlCeProviderServices..cctor() System.RuntimeFieldHandle. GetValue (RtFieldInfo이 필드, 인스턴스를 객체, RuntimeType이 fieldType, RuntimeType이 declaringType, 부울 & domainInitialized) System.Reflection.RtFieldInfo.InternalGetValue (객체,451,515,OBJ, 부울 doVisibilityCheck, 부울 doCheckConsistency) System.Reflection.RtFieldInfo.InternalGetValue (객체 OBJ, 부울 doVisibilityCheck) System.Reflection.RtFieldInfo.GetValue (객체 OBJ) System.Data.SqlServerCe.ExtensionMethods.SystemDataSqlServerCeSqlCeProviderServices_Instance_GetValue () System.Data.SqlServerCe.ExtensionMethods.SystemDataSqlServerCeSqlCeProviderServices_Instance() System.Data.SqlServerCe.SqlCeProviderFactory.System.IServiceProvider.GetService (유형 ServiceType 자리) System.Data.Common.DbProviderServices.GetProviderServices (DbProviderFactory 공장) 시스템. Data.Comm on.DbProviderServices.GetProviderServices (DbConnection 연결) System.Data.Entity.ModelConfiguration.Internal.Configuration.CodeFirstCachedMetadataWorkspace.GetMetadataWorkspace (DbConnection storeConnection) System.Data.Entity.Infrastructure.DbModel.CreateObjectContext [TContext (DbConnection existingConnection) System.Data.Entity.Internal.LazyInternalContext.InitializeFromModel (DbModel 모델) System.Data.Entity.Internal.LazyInternalContext.InitializeContext() System.Data.Entity.Internal.InternalContext.Initialize() System.Data .Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (유형 entityType) System.Data.Entity.Internal.Linq.EfInternalQuery 1.Initialize() System.Data.Entity.Internal.Linq.EfInternalQuery 1.Include (문자열 경로) System.Data.Entity.Infrastructure.DbQuery`1.Include (문자열 경로) MyProjet.Areas .Administration.Models.BusinessModel.GetBusinesses() D에가 : 라인 47 MyProjet.Tests.Administration.ModlelTests.Business.TestGetBusinessesList() : \ projects2010 \ MyProjet \ MyProjet 지역 \ \ 관리 \ 모델 BusinessModel.cs을 \ D : \ projects2010 \ MyProjet \ MyProjet.Tests \ Administration \ ModlelTests \ Business.cs : 줄 45

MVC 응용 프로그램에서 기존 MyData 연결 문자열을 바꾸려고 시도했지만 정상적으로 작동합니다. 이 문제가 테스트 프로젝트에 추가 될 때만이 문제가 발생합니다. 또한 테스트 프로젝트는 SQL 또는 SQL Express 데이터베이스를 가리킬 때 문제없이 작동합니다.

잠시 동안이 문제로 어려움을 겪어 왔지만 그 사실을 알 수 없습니다. 나는 단순한 것을 간과했다고 확신한다.

Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");

를 사용

+0

'System.Security.VerificationException : 작동으로 인해 런타임이 불안정해질 수 있습니다 .' 대부분 발생하지 않아야합니다. 이것은 공급자의 버그 일 수 있습니다. –

+0

안녕하세요 크레이그, 답변 해 주셔서 감사합니다. 업데이트 소식을 기다려야 할 것 같습니다. 나는 평균 시간에 해결책을 찾으면 게시 할 것입니다. –

+1

@ Jag의 코드가 작동하더라도 버그에 대한 연결 보고서를 제출하는 것이 좋습니다. –

답변

4

시도 내가 내장 마이크로 소프트의 테스트 프레임 워크에서 테스트를 실행 한 예 http://www.arrangeactassert.com/code-first-entity-framework-unit-test-examples/

+0

안녕 Jag, 조언 주셔서 감사합니다, 나는 SqlCeConnectionFactory ("System.Data.SqlServerCe.4.0"); 하지만 나는 그것을 올바른 방식으로 사용하지 않았을 수도 있습니다. 오늘 자습서를보고 작동시킬 수 있는지 알아 봅니다. –

+0

나는 당신의 튜토리얼을 보았다 - 그것은 훌륭하다, 나중에 모든 것을 통과해야 할 것이다. 불행히도 저는 여전히 예외를 얻고 있습니다. 여러 다른 프로젝트에서 코드를 테스트했는데 완벽하게 작동합니다. 단지 단위 테스트 프로젝트에 있습니다. NUnit 대신 Microsoft 테스트 프레임 워크를 사용하고 있습니다. 충돌이 있는지 확인합니다. 대답을 찾으면 게시합니다. 다시 한 번 감사드립니다. 자습서가 좋습니다. –

+0

Application_Start에서 Global.asax.cs에 행을 추가 한 다음 모든 것이 작동했습니다. 인스턴스를 찾을 수없는 문제가있었습니다. – kamranicus

0

내 블로그 게시물을 참조하십시오. 테스트 프레임 워크를 NUnit으로 변경하면 (Jag 튜토리얼 에서처럼) 문제가 수정되었습니다.

SqlServerCe와 Visual Studio Unit Testing Framework 사이에 충돌이있는 것처럼 보입니다.

관련 문제