Не удается создать базу данных с учетными данными, используя Entity Framework Code-First? - PullRequest
1 голос
/ 08 февраля 2020

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

Я начал создавать модели и все хорошо, затем включены миграции и добавления-миграции, и все работает хорошо, но когда я запускаю команду Update-Database, я получаю сообщение об ошибке.

Следовательно, я хочу создать базу данных с использованием кода в первую очередь, используя учетные данные, после многих исследований я не нашел решения, и в большинстве учебных пособий используется «Доверенное соединение».

Что я использую

App.Config

  <connectionStrings>
    <add name="CodeFirst" connectionString="Server=.\SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

Класс DbContext

public class CodeFirstContext : DbContext
    {
        public CodeFirstContext() : base("name=CodeFirst")
        {

        }

        public DbSet<Product> Products { get; set; }

        public DbSet<Category> Categories { get; set; }

    }

Ошибка, которую я получаю

Login failed for user 'anyuser'.

Вопрос в том, что я сделал что-то не так? или использование учетных данных не может быть выполнено с использованием подхода «сначала код»?

Заранее спасибо

1 Ответ

0 голосов
/ 08 февраля 2020

OP:

Я хочу создать базу данных с с кодом , используя учетные данные ,

... и:

после многих исследований я не нашел решения, и в большинстве учебных пособий используется «Надежное соединение».

В этом заключается ложь проблема с подходами, основанными на коде, при развертывании в новой базе данных с использованием указанного c имени входа - это курица и яйцо , потому что:

  1. база данных еще не существует
  2. строка подключения запрашивает явный логин
  3. логин еще не существует, скажем SQL
  4. , потому что база данных не существует

Конфигурация OP:

<connectionStrings>
    <add name="CodeFirst" 
         connectionString="Server=.\SQLEXPRESS;Database=CodeFirst;User ID=anyuser;Password=anypassword;" 
      ... />
  </connectionStrings>

Так в чем же решение?

  1. Использовать встроенную безопасность: это позволяет вам создать базу данных с нуля из кода. Однако любые другие логины, которые вам могут понадобиться, могут быть созданы позже. Однако, с точки зрения DB, это немного плохая практика, потому что вы должны привыкнуть иметь одну учетную запись для развертывания (с достаточным количеством прав для развертывания) и другую для общего доступа к приложению (и без прав для развертывания)

  2. Создать регистрацию первым: это позволяет использовать указанный вами логин, однако вам, скорее всего, сначала нужно будет создать пустую базу данных с SQL до Вы можете создать логин. Первопроходцам, использующим код, может не понравиться эта идея.

Последний соответствует рекомендациям DACPA C, с которыми вы уже должны быть знакомы, начиная с работы с базой данных. Точно так же, как DACPA C не должен развертывать логины и настраивать безопасность, так и кодировать в первую очередь. В конце концов, базы данных не заботятся о том, используете ли вы сначала код или базу данных (под капотом, оба, вероятно, используют некоторую форму инкапсулированных сценариев), но ваш администратор БД может поднять бровь в зависимости от того, как безопасность

Являются ли подходы на основе баз данных лучше?

В теме не делайте этого, попробуйте вместо этого , код Первый пытается сделать все с помощью кода, и в то время как благородное занятие, возможно, не реализуется c. Некоторые вещи, такие как попытка создания логинов, возможно, невозможны, как упомянуто выше.

Между тем изменения схемы в первую очередь выполняются путем развертывания DACPAC со стороны базы данных. Аутентификация осуществляется с помощью имени входа, используемого для входа в SSMS (например), в первую очередь. Для развертывания DACPA C не требуется код, NET или другой.

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

Возможно, вы захотите переосмыслить сначала код Code-first и EF Migrations на самом деле не достигли успеха в качестве концепции в реальном мире, где вы создали такие CD-среды, как DEV; ТЕСТОВОЕ ЗАДАНИЕ; UAT и PROD.

Я вижу так много разработчиков, использующих только с кодом для развертывания в локальной базе данных . Оказавшись там, они используют различные средства для развертывания изменений на других компьютерах, включая TEST и PROD , будь то сценарии T SQL или резервное копирование базы данных.

Просто кажется быть таким большим усилием для чего-то, что даже не заканчивает гонку.

...