@akass
Developer

Как публиковать ASP.NET с EF CodeFirst?

Впервые публикую проект на ASP и поражен какой это гемор, уже второй день не могу сделать.
Делаю web deploy и при регистрации пользователя выкидывает
CREATE DATABASE permission denied in database 'master'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: CREATE DATABASE permission denied in database 'master'.

Я думал что все действия с базой идут по логину/паролю, которые в connection string.
Может кто объяснить как работает вся эта экосистема и как завести простой проект с БД на EF?
Миграции включены.
Для регистрации используется ASP Identity
  • Вопрос задан
  • 389 просмотров
Решения вопроса 1
@carbon88
.NET developer/ORM developer
А в чем собственно проблема?
случай 1: сервер базы данных принадлежит хостингу. соответственно он и закрыл доступ на создание баз данных от греха подальше, что собственно понятно и резонно иначе каждый Вася будет там базы создавать и удалять. В этом случае наверняка база данных уже существует и не стоит ее дропать, наверняка EF умеет работать с существующей базой а не создавать ее заново.
случай 2: сервер баз данных это ваш физический или виртуальный сервер за который вы полностью в ответе. ну так создайте пользователя который сможет создавать базы данных и создавайте через него.
случай 3 : все то же что и во втором случае только вы не являетесь Администратором сервера баз данных. ну так подергайте администратора чтобы дал права или хотя бы превратил ситуацию в случай 1 - то есть гарантировал вам базу данных а вы уже создаете таблицы и прочую нужную хрень.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
как-то так при старте приложения, на логин/пароль надо проверить права в СУБД
Log_app.Info("Checking database...");
            using (var ctx = new ApplicationDbCtx())
            {
                if (!ctx.Database.Exists() || !ctx.Database.CompatibleWithModel(false))
                {
                    try
                    {
                        Log_app.Info("updating Database ...");
                        Database.SetInitializer<ApplicationDbCtx>(new MigrateDatabaseToLatestVersion<ApplicationDbCtx, MyApplication.Migrations.Configuration>());
                        ctx.Database.Initialize(true);
                    }
                    catch (Exception ex)
                    {
                        Log_app.Error(ex);
                    }
                }
            }
            Log_app.Info("checking Database completed!");
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы