Code-First Entity Framework - ошибка при создании БД SQL CE - PullRequest
3 голосов
/ 27 июля 2010

Я использую Entity Framework CTP с Code-First, как в этом руководстве Скотта Гатри и другом Скотта Хансельмана (не могу опубликовать ссылку, но Google "Простой код сначала с Entity Framework 4 - Magic Unicorn Feature CTP 4 "). Это прекрасно работает для основного приложения MVC, но сейчас я пытаюсь добавить тестовый проект, который использует отдельную базу данных SQL CE.

Я добавил следующее в файл App.Config:

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

Однако, когда я пытаюсь запустить тесты, при попытке создать базу данных выдается следующая ошибка:

Метод испытания MyProjet.Tests.Administration.ModlelTests.Business.TestGetBusinessesList бросил исключение: System.Reflection.TargetInvocationException: Исключение было брошено цель вызова. ---> System.TypeInitializationException: Инициализатор типа для 'System.Data.SqlServerCe.SqlCeProviderServices' бросил исключение. ---> System.Security.VerificationException: Операция может дестабилизировать во время выполнения.

Со следующей трассировкой стека:

System.Data.SqlServerCe.SqlCeProviderServices..ctor () System.Data.SqlServerCe.SqlCeProviderServices..cctor () System.RuntimeFieldHandle.GetValue (RtFieldInfo поле, экземпляр объекта, RuntimeType fieldType, RuntimeType declaringType, Boolean & domainInitialized) System.Reflection.RtFieldInfo.InternalGetValue (Объект obj, Boolean doVisibilityCheck, Boolean doCheckConsistency) System.Reflection.RtFieldInfo.InternalGetValue (Объект obj, Boolean 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 (Тип Тип Обслуживания) System.Data.Common.DbProviderServices.GetProviderServices (DbProviderFactory завод) System.Data.Common.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 (Тип тип объекта) System.Data.Entity.Internal.Linq.EfInternalQuery 1.Initialize() System.Data.Entity.Internal.Linq.EfInternalQuery 1.Include (String дорожка) System.Data.Entity.Infrastructure.DbQuery`1.Include (String дорожка) MyProjet.Areas.Administration.Models.BusinessModel.GetBusinesses () в D: \ projects2010 \ MyProjet \ MyProjet \ Области \ Администрирование \ Models \ BusinessModel.cs: линия 47 MyProjet.Tests.Administration.ModlelTests.Business.TestGetBusinessesList () в D: \ projects2010 \ MyProjet \ MyProjet.Tests \ Администрирование \ ModlelTests \ Business.cs: линия 45

Я попытался заменить существующую строку подключения MyData в приложении MVC, и она работает нормально. Эта проблема возникает только тогда, когда она добавлена ​​в проект тестирования. Кроме того, проект тестирования работает без проблем, если он указывает на базу данных SQL или SQL Express.

Некоторое время боролся с этим и просто не могу понять. Я уверен, что я упустил что-то простое.

Ответы [ 2 ]

4 голосов
/ 28 июля 2010

Попробуйте использовать

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

См. Мой блог для примера http://www.arrangeactassert.com/code-first-entity-framework-unit-test-examples/

0 голосов
/ 30 июля 2010

Я проводил тесты в рамках встроенной среды тестирования Microsoft.Изменение среды тестирования на NUnit (как в учебнике Jag) устранило проблему.

Похоже, что существует конфликт между SqlServerCe и Visual Studio Framework Unit Testing Framework .

...