В моем проекте я хочу запустить некоторые модульные тесты на слое DAL, который использует EntityFramework. Я создаю из scrips новую базу данных перед каждым запуском тестов (чтобы всегда иметь одинаковые исходные данные при выполнении тестов). В конце тестов эта база данных удаляется (все делается автоматически с помощью атрибутов [ClassInitialize ()] и [ClassCleanup ()].
Сгенерированная база данных всегда имеет другое имя, например TestDB-2009-01-31--12-00-00, чтобы не конфликтовать с тестовыми базами данных моих коллег.
Реальная проблема, с которой я столкнулся, заключается в том, что я еще не нашел способ сообщить EntityFramework о подключении к сгенерированной базе данных (имя генерируется во время выполнения). Прямо сейчас он подключается к строке подключения, указанной в файле app.config, что, конечно, нормально. И поскольку я делаю эти тесты, я ищу что-то, что можно сделать за пределами dal-библиотеки DAL (без установки чего-либо непосредственно в контексте EF).
Любая помощь с благодарностью.
Благодарю.
Когда вы создаете ObjectContext, вам нужно будет использовать перегрузку конструктора, которая принимает ConnectionString в качестве параметра.
Вы можете построить эту ConnectionString, используя EntityConnectionStringBuilder . Более конкретно, предполагая, что вашей базой данных является SQL Server, вы можете использовать SqlConnectionStringBuilder для создания значения для EntityConnectionStringBuilder.ProviderConnectionString.
Вот некоторый код, который создает строку подключения SQL Server
var scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "localhost";
scsb.InitialCatalog = "MyDB";
scsb.IntegratedSecurity = true;
А вот код, который строит Entity ConnectionString:
var builder = new EntityConnectionStringBuilder();
builder.Metadata = "res://*/MyModel.csdl|res://*/MyModel.ssdl|res://*/MyModel.msl";
builder.Provider = "System.Data.SqlClient";
builder.ProviderConnectionString = scsb.ConnectionString;