Я пишу веб-приложение, которое должно использовать 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
Разрешение CREATE DATABASE отклонено в базе данных «master».... миграция базы данных с помощью EF ⇐ C#
Место общения программистов C#
1766142229
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79850936/create-database-permission-denied-in-database-master-migrating-a-database[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия