Не удается инициализировать локальную SQL серверную базу данных с помощью инструментов командной строки EFCore - PullRequest
0 голосов
/ 28 января 2020

Я пытался следовать нескольким различным учебникам с EFCore и ядром. net, и я был полностью заблокирован в момент, когда я пытаюсь создать локальную базу данных.

Я использовал и инструменты powershell, и инструменты командной строки, чтобы попытаться создать начальную миграцию (или сделать что-нибудь, на самом деле).

Я постоянно получаю сообщение об ошибке:

System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure()' to the 'UseSqlServer' call.
 ---> Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the login process. (provider: Named Pipes Provider, error: 0 - No process is on the other end of the pipe.)

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

Вот код c# для добавления контекста:

services.AddDbContextPool<TestDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("TestDb")
    )
);

Это код строки подключения: "TestDb": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=TestDb"

Я получаю похожие ошибки, независимо от того, запускаю ли я add-migration, dotnet ef migration add или dotnet ef dbcontext info. (примечание: при вызовах do tnet я использую -s .. \ {webproject} \ {webproject} .csproj

Я также испортил строку подключения, добавив различные комбинации Trusted_Connection=True; MultipleActiveResultSets=True; и Integrated Security=true.

Я вошел в SSMS и убедился, что для аутентификации сервера установлен режим SQL Server и Windows Authentication, а для параметра Maximum Connections установлено значение 0 (не ограничено) Я также зашел в систему и попытался добавить пользователя практически ко всем ролям сервера.

Так что, да, я немного растерялся. Я работал с EF годами, хотя это мое Первый опыт работы с EFCore, и я определенно больше разработчик, чем администратор SQL. Это также мой первый раз, когда я пытаюсь использовать локальную базу данных на этом конкретном компьютере.

Редактировать: Просмотр error.log в AppData \ Local \ Microsoft \ Microsoft SQL Server Local DB \ Instances \ mssqllocaldb я вижу эту ошибку:

2020-01-28 10:15:03.50 Logon       Error: 18456, Severity: 14, State: 38.
2020-01-28 10:15:03.50 Logon       Login failed for user 'LAPTOP-NC6HQ4TB\ripli'. Reason: Failed to open the explicitly specified database 'TestDb'. [CLIENT: <named pipe>]

, что сбивает с толку. Конечно, я не могу открыть указанную базу данных. Весь смысл это я хочу создать БД, которая еще не существует.

1 Ответ

0 голосов
/ 28 января 2020

Нашел ответ. Извините всех, кто пытался помочь, поскольку у вас не было достаточно информации для ее решения.

В DbContext я пытался добавить код в конструктор, чтобы попытаться заполнить некоторые данные в базе данных как часть теста. Это вызвало несколько проблем. Если база данных еще не была создана, она пыталась подключиться к базе данных до ее создания, что вызвало описанные мной проблемы.

Кроме того, если бы я создал базу данных вручную, он попытался бы получить доступ к DbSets (который еще не был создан), а затем жаловаться, что имя набора было недействительным (что, на данный момент, было.

Все это могло бы быть хорошо, если БД была создана заранее, но так как я использовал DbContext для создания базы данных, это понятно вызывало проблемы.

И всей этой головной боли можно было бы избежать, если бы я не нарушил SRP и не попытался (даже временно) перехватить конструктор контекста для взлома в некоторых тестовых данных.

Вывод здесь? Не загрязняйте ваших конструкторов несвязанными взломами. Блеф.

...