Невозможно использовать существующую базу данных в модульных тестах с картой Effort

c# effort entity-framework entity-framework-6 unit-testing

Вопрос

Я пытаюсь написать тест с использованием базы данных, размещенной в Azure SQL, с каркасом Effort на Entity Framework 6.

При выполнении следующего кода генерируется исключение:

[ClassInitialize]
public static void ClassInitialize(TestContext context)
{
    EffortProviderConfiguration.RegisterProvider();
}

[TestMethod]
public void TestMethod1()
{
    const string connectionString = "Data Source=***;Initial Catalog=my_catalog;User ID=user;Password=password;provider=System.Data.SqlClient";
    IDataLoader loader = new EntityDataLoader(connectionString);
    using (var ctx = new UsersDbContext(Effort.DbConnectionFactory.CreatePersistent("cool", loader)))
    {
        var usersCount = ctx.Users.Count();
    }
}

Исключение, вызванное выполнением Count() :

Effort.Exceptions.EffortException: Необработанное исключение при попытке инициализировать содержимое таблицы «Таблица» ---> System.ArgumentException: ключевое слово не поддерживается: «источник данных».

Такое же исключение возникает при замене EffortProviderConfiguration.RegisterProvider() с настройками app.config.

При использовании точно такой же строки соединения для создания UsersDbContext она преуспевает, и данные доступны. Кроме того, создание контекста с постоянным или переходным режимом Effort, без строки подключения, также хорошо работает.

Что нужно сделать для инициализации соединения с существующими данными из реальной БД?

Популярные ответы

Если вы похожи на меня, вы в замешательстве, почему вы должны дать Effort строку соединения вообще (поскольку она работает с базой данных в памяти и вы напрямую связываете ее с контекстом), документация делает ее более понятной - это требуется только в том случае, если вы используете варианты базы данных First или Model-First для Entity Framework, потому что строка соединения Entity предоставляет информацию, необходимую для Effort, чтобы найти вашу модель, чтобы она могла построить схему из нее! Таким образом, вы можете безопасно заполнить части идентификатора / пароля сервера / базы данных / пользователя строки подключения фиктивными именами.

Это также дает понять, что пользовательский подход по умолчанию DbConnectionFactory работает только для кода, что объясняет первые несколько часов ошибок, которые я получал ... Сначала для первой модели или базы данных вам нужно ввести Entity Connection в класс сущности , как описано здесь .

Полезный совет - потому что класс сгенерированной сущностью объекта является частичным классом, вы можете создать другой файл кода в той же сборке, предоставить ему одно и то же пространство имен и сделать его также частичным классом, и вы можете добавить второй конструктор, необходимый для установки EntityConnection к этому файлу кода, таким образом, когда вы изменяете / воссоздаете модель сущности, код с настраиваемым конструктором не будет удаляться с помощью шаблона t4.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему