Я хотел бы запустить реальные тесты интеграции моих репозиториев EF4.1 с базой данных в памяти, например, nyibernate-версия ayende .
У меня есть модель кода в первую очередь для устаревшей базы данных (старые таблицы и имена столбцов должны отображаться в моих объектах с использованием конфигураций кода).
Я бы хотел использовать Sqlite (или другое) для:
- Создание базы данных в памяти из моей модели
- Создать DBContext для моей модели с этой базой данных в памяти
- У меня уже есть IoC / DI IDBContextFactory, который создается с моими (универсальными) репозиториями (также с использованием шаблона GenericRepository)
В сети есть биты и подсказки, которые предполагают, что это должно быть возможно, но не так много для подходов, основанных на коде. Кто-нибудь знает, возможно ли это?
Некоторые фрагменты моей тестовой библиотеки, см. // THROWS ERROR
пометка ошибок времени выполнения:
public class MyDbContextFactory : IDbContextFactory
{
private static object context;
public object CurrentContext
{
get {
if(context == null)
{
// ?? DOESN'T WORK AS THERE'S NO META DATA
var connBuilder = new EntityConnectionStringBuilder();
connBuilder.Provider = "System.Data.SQLite";
connBuilder.Metadata =
@"res://*/TestEfDb.csdl|res://*/TestEfDb.ssdl|res://*/TestEfDb.msl";
connBuilder.ProviderConnectionString =
ConfigurationManager.ConnectionStrings["DataContext"].Name;
var entConnection = new EntityConnection(connBuilder.ConnectionString);
// THROWS ERROR: sqlite Format of the initialization string does not
// conform to specification starting at index 0
// for connection string "Data Source=:memory:;Version=3;New=True;"
//var entConnection = new EntityConnection
// (ConfigurationManager.ConnectionStrings["DataContext"].Name);
context = new MyDbContext(entConnection);
}
return context;
}
}
}
...
[Test]
public void test_me()
{
var auditRespository = new AuditRepository(new MyDbContextFactory());
auditRespository.GetAll<Audit>();
}