Entity Framework 5 сначала не создает базу данных

Я пытаюсь создать новую базу данных, используя сначала код Entity Framework. Однако при запуске кода база данных нет создал (используяDropCreateDatabaseIfModelChanges настройки), хотя код работает нормально. Я'я вижу следующее исключение, когда я пытаюсь получить что-то из базы данных.

Мой проект настроен с использованием отдельногоDataAccess слой с общим сервисом и построением хранилища. Таким образом, все мои объекты, хранилище, а также контекст базы данных находятся в отдельном проекте в рамках решения.

мойglobal.asax Файл содержит следующий фрагмент кода.

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

Это должно инициализировать новую базу данных, если она нене так ли?

Мой класс контекста базы данных выглядит следующим образом;

namespace Website.DAL.Model
{
    public class MyContext : DbContext
    {
        public IDbSet Projects { get; set; }
        public IDbSet Portfolios { get; set; }

        /// 
        /// The constructor, we provide the connectionstring to be used to it's base class.
        /// 
        public MyContext()
            : base("MyConnectionString")
        {
        }

        static MyContext()
        {
            try
            {
                Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// 
        /// This method prevents the plurarization of table names
        /// 
        /// 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove();
        }
    }
}

Мы создали этот класс, следуя нескольким учебникам и статьям в Интернете. Это'Все новое для меня, но, насколько я вижу, все кажется правильным до сих пор. Так что теперь две сущности ям с помощью. Oни'называетсяПроект» а также 'Портфолио', Они похожи на это;

public class Portfolio
    {
        [Key]
        public Guid Id { get; set; }
        public String Name { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        public bool IsPublished { get; set; }

        public virtual ICollection Projects { get; set; }
    }

А также

public class Project 
    {
        [Key]
        public Guid Id { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime? EndDate { get; set; }
        public bool IsPublished { get; set; }
        public String Title { get; set; }
    }

База данных яя использую работает на внешнем сервере, он пришел с хостинг-провайдеромм с помощью. Я'у нас есть база данных SQL Server, и строка подключения к базе данных находится вweb.config веб-сайта проекта. Я'мы уже пытались удалить базу данных и позволить коду воссоздать ее, что, к сожалению, нет работа. Я что-то упускаю здесь очевидное? Или это может быть простая вещь, как права доступа к серверу для создания баз данных?

Примечание: когда я запускаюDatabase-Update -Script Команда для генерации кода SQL, похоже, что созданы правильные операторы SQL для создания всех таблиц.

ОБНОВЛЕНИЕ 1: Хорошо, благодаря некоторым комментариям я пошел немного дальше. Я'мы добавили два свойства в мои объекты, чтобы вызвать некоторые изменения, и ямы также создали собственный инициализатор, как это; я '

public class ForceDeleteInitializer : IDatabaseInitializer
    {
        private readonly IDatabaseInitializer _initializer = new DropCreateDatabaseIfModelChanges();

        public ForceDeleteInitializer()
        {
            //_initializer = new ForceDeleteInitializer();
        }

        public void InitializeDatabase(MyContext context)
        {
            //This command is added to prevent open connections. See http://stackoverflow.com/questions/5288996/database-in-use-error-with-entity-framework-4-code-first
            context.Database.ExecuteSqlCommand("ALTER DATABASE borloOntwikkel SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
            _initializer.InitializeDatabase(context);
        }
    }

Мы также удалили инициализатор из конструктора моего контекста, так что это означает, что ямы удалили эту строку кода;

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

После этого я'мы добавили эти три строки в мой файл Global.asax;

Database.SetInitializer(new ForceDeleteInitializer());
MyContext c = new MyContext();
c.Database.Initialize(true);

При отладке ям теперь получаю это исключение;

Это дает мне следующую информацию:

InnerException говорит: провайдер неt вернуть ProviderManifestTokenInnerException в InnerException говорит: «Для этой операции требуется подключение к базе данных masterdatabase. Соединение можетне должно быть шириноймастер'-database, потому что исходное соединение открыто, а ссылки удалены из соединения. Пожалуйста, предоставьте не открытое соединение "

После этих действий база данных становится недоступной, поэтому, скорее всего, удаляется ..

Что можно сделать по этому поводу? Это'Скорее всего, я могуДоступ к основной базе данных, потому что мой хостинг-провайдер не выигралдайте мне правильное право доступа конечно.

Ответы на вопрос(4)

Ваш ответ на вопрос