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

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

Сообщение Anonymous »

Я пишу веб-приложение, которое должно использовать EF для обработки базы данных сервера SQL Server Express (приложение называется RRDA).
Решение разделено на 3 проекта: Я работаю с подходом «сначала код», поэтому я использую инструменты 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 с теми же привилегиями... как это проверить?
Кстати, сообщение об исключении довольно длинное, но оно только добавляет стек вызовов без особой информации...
PS: запуск этого запроса из 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, но если это так, то результат немного беспокоит...
PPS: использование 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#»