Разрешение CREATE DATABASE отклонено в базе данных «master».... миграция базы данных с помощью EFC#

Место общения программистов C#
Ответить
Anonymous
 Разрешение CREATE DATABASE отклонено в базе данных «master».... миграция базы данных с помощью EF

Сообщение Anonymous »

Я пишу веб-приложение, которое должно использовать EF для обработки базы данных сервера MS SQLExpress (приложение называется RRDA).
Решение разделено на 3 проекта: RRDA.Web (веб-приложение), RRDA.Data (модели данных), RRDA.Core (базовые классы с интерфейсом плагинов импорта данных, валидаторами и т. д.).
Я работаю с подходом «сначала код», поэтому мне интересны инструменты EF для первоначального создания базы данных и обновления структуры, пока я меняю саму структуру базы данных (конечно, с помощью кода).
Я определил DBContext в RRDADbContext:
public class RRDADbContext(DbContextOptions options) : DbContext(options)
{
public DbSet ReportTypes { get; set; }
public DbSet ReportFiles { get; set; }
public DbSet ReportEntities { get; set; }
public DbSet ReportProperties { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().HasIndex(p => new { p.Name, p.ReportEntityId });
// TODO: ...
}
}

И DbContextFactory:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;

namespace RRDA.Data
{
public class RRDAContextFactory : IDesignTimeDbContextFactory
{
public RRDADbContext CreateDbContext(string[] args)
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseSqlServer("Server=.\\SQLEXPRESS;Database=RRDA.Db;Trusted_Connection=True;MultipleActiveResultSets=true;TrustServerCertificate=True;Integrated Security=True;Encrypt=True");
return new RRDADbContext(optionsBuilder.Options);
}
}
}

Теперь запускаем команду:
dotnet ef migrations add InitialCreate -p RRDA.Data -s RRDA.Web

Работает нормально, но:
dotnet ef database update -p RRDA.Data -s RRDA.Web

Возможна следующая ошибка:

Разрешение CREATE DATABASE отклонено в базе данных «master».

Но пока я вижу, что у меня есть все привилегии, необходимые для создания и изменения базы данных...
На самом деле я могу «вручную» создать базу данных изнутри VisualStudio, но, конечно, я не могу понять, запускается ли инструмент ef с теми же привилегиями... как это проверить?
Кстати, сообщение об исключениях довольно длинное, но оно только добавляет стек вызовов без особой информации...
---- P.S. ----
Выполнение этого запроса из Visual Studio:
SELECT
IS_SRVROLEMEMBER('dbcreator') AS IsDbCreator, -- 1 = yes, 0 = no, NULL = login not valid
IS_SRVROLEMEMBER('sysadmin') AS IsSysAdmin, -- 1 = yes, 0 = no, NULL = login not valid
HAS_PERMS_BY_NAME(NULL, 'SERVER', 'CREATE ANY DATABASE') AS CanCreateDatabase -- 1/0/NULL;

Результат:
IsSysAdmin | IsDbCreator | CanCreateDatabase
1 | 1 | NULL

Я не знаю, правильно ли собрано значение CanCreateDatabase, но если это так, то результат немного беспокоит...
---- P.P.S. ----
используя HAS_PERMS_BY_NAME(NULL, 'SERVER', 'CREATE ANY DATABASE'), как предложено исправленным SQL-скриптом @Charlieface, и теперь это приводит к следующему:
IsSysAdmin | IsDbCreator | CanCreateDatabase
1 | 1 | 1


Подробнее здесь: https://stackoverflow.com/questions/798 ... a-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»