2016-04-19 3 views
0

Я создал приложение с Entity Framework 6, создал некоторые методы для вставки извлеченных данных из базы данных, и теперь я бы хотел протестировать его как для среды производства, так и для отладки ,Две идентичные сгенерированные базы данных с Entity Framework 6

Чтобы убедиться, что все работает так, как хотелось бы, база данных отладки должна удалять все данные для моих тестов, в то время как мое производство должно хранить свои данные.

У меня есть два проекта: MyApp.Database и MyApp.Database.Test, и каждый из них имеет соединительную-нить в их app.config -файла, что программа загружает таким образом:

public DatabaseContext() : base("name=MyDB") 
{ 
    System.Data.Entity.Database.SetInitializer<DatabaseContext>(new CreateDatabaseIfNotExists<DatabaseContext>()); 
} 

и соединение строка, где параметр database установлен в MyProdDB и MyTestDB:

<connectionStrings> 
    <add name="MyDB" connectionString="Host=localhost;user id=myUser;password=myPassword;database=MyProdDB" providerName="Npgsql" /> 
</connectionStrings> 

Когда я запустить приложение и запустить тесты, я получить правильное соединение-строку для каждого типа базы данных. Но я получаю сообщение об ошибке, когда я запускаю свои тесты : 42P01: relation "dbo.Tags" does not exist. Простое сообщение, в котором говорилось, что я не перенес мои данные в свою тестовую базу данных.

Но как перенести его в тестовую базу данных?

Я попытался выбрать тест-проект в Package manager Console, и выполнив следующие команды:

PM> Add-Migration "Init" 
No migrations configuration type was found in the assembly 'MyApp.Database.Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration). 

PM> Update-Database 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
No migrations configuration type was found in the assembly 'MyApp.Database.Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration). 

PM> Enable-Migrations 
No context type was found in the assembly 'MyApp.Database.Test'. 

мне нужно указать свой DbContext класс для MyApp.Database.Test который является почти точной копией MyApp.Database ли?

+0

Я запутался, будьте вы пытаетесь настроить модульные тесты или два различных сред - PROD и DEV. IAC, вам, вероятно, нужен только ваш контекст в одном проекте, в котором будут жить миграции. Чтобы обновить PROD, вы можете либо переключить строку соединения (в контексте проекта), чтобы указать на PROD и запустить миграцию, либо вы можете сгенерировать скрипт для обновления другой базы данных «update-database -Script». –

+0

Мне нужны интеграционные тесты для одной и той же среды. Я не хочу потерять данные в PROD - только в DEV. Мой PROD обновлен и работает как следует. Если я попытаюсь запустить '' Update-Database -Script', он говорит, что у меня нет ожидающих явных миграций. Могу ли я попросить, чтобы он переместился с 0? –

+0

Оказывается, я могу: '' Update-Database -Script -SourceMigration: 0''. Давайте посмотрим, что это заставляет меня ... –

ответ

0

Если вам не нужны данные в среде DEV, просто снимите базу данных. Вы используете CreateDatabaseIfNotExists, поэтому он создаст новую базу данных с современной схемой. Более того, вы можете настроить свой инициализатор в файле конфигурации. Используйте inializer CreateDatabaseIfNotExists в PROD и DropCreateDatabaseIfModelChanges на DEV. Поэтому, если модель изменится, вам придется использовать миграции на PROD, но DEV просто отбросит базу данных и снова создаст ее.

Пример:

<contexts>  
    <context type="Elmah.SqlServer.EFInitializer.ElmahContext, Elmah.SqlServer.EFInitializer"> 
    <databaseInitializer type="Elmah.SqlServer.EFInitializer.ElmahDatabaseInitializer, Elmah.SqlServer.EFInitializer" /> 
    </context>  
</contexts> 

или посмотреть here

+0

Это часть решения, я полагаю, но DEV по-прежнему не содержит никаких таблиц ... Не нужно ли делать что-то «Обновление-База данных» на нем ? –

+0

после выполнения базы данных инициализатора CreateDatabaseIfNotExists будет содержать все таблицы схемы, описанные в вашей модели –

+0

. Это означает, что я делаю следующее в том же файле: https://gist.github.com/Limro/48017ebbd7e80f95e76396a7f7231f02 –

Смежные вопросы