Решение разделено на 3 проекта:
- (веб-приложение)
Код: Выделить всё
RRDA.Web - (модели данных)
Код: Выделить всё
RRDA.Data - (базовые классы с интерфейсом плагинов импорта данных, валидаторами и т. д.)
Код: Выделить всё
RRDA.Core
Я определил 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: ...
}
}
Код: Выделить всё
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».
Но, насколько я вижу, у меня есть все привилегии, необходимые для создания и изменения базы данных.
На самом деле я могу «вручную» создать базу данных из Visual Studio, но, конечно, не могу непонятно, запускается ли инструмент 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
Мобильная версия