Изменить EF Core Migrations на другого владельца по умолчанию - PullRequest
2 голосов
/ 18 апреля 2020

Я создаю новое приложение. NET Core 3.1.3, подключаясь к новой базе данных SQL Server 2016. Соединение является доверенным. Инструмент миграции EF создает таблицы со мной как владелец.

dotnet ef migrations add InitialDb
dotnet ef database update

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

1 Ответ

2 голосов
/ 18 апреля 2020

Если вы не укажете схему для своих сущностей, EF сгенерирует DDL без указания схемы. А в SQL Server это означает, что объект будет создан в схеме пользователя по умолчанию. Обычно схема пользователя по умолчанию должна быть dbo, но если это не так, тогда объект будет создаваться в другой схеме.

И в SQL Объекты сервера принадлежат (опять же по умолчанию) владельцу схемы, в которой они созданы.

Итак, настройте таблицы, которые должны быть созданы в схеме dbo, или настройте схему по умолчанию для вашего пользователя на dbo, и объекты будут созданы в dbo схема и принадлежит dbo.

например, в OnModelCreating, добавьте

foreach (var et in modelBuilder.Model.GetEntityTypes())
{
    et.SetSchema("dbo");
}

или в SQL

alter user [yourdomain\youruser] with default_schema=dbo

Обратите внимание, что если вы владелец базы данных или системный администратор, вы всегда подключаетесь к базе данных как dbo, и ваш неквалифицированный DDL будет создавать объекты в схеме dbo.

Я хочу, чтобы таблицы принадлежали идентификатор службы

Обычно вы не хотите, чтобы объекты, принадлежащие идентификатору, использовались приложением для подключения, так как этот идентификатор должен быть в роли с наименьшими привилегиями. Например, нет возможности удалять таблицы или создавать триггеры. Обычно объекты должны просто принадлежать dbo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...