Я использую 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.
Некоторое время боролся с этим и просто не могу понять. Я уверен, что я упустил что-то простое.