Entity Framework 5 code-first no crea base de datos

Estoy tratando de crear una nueva base de datos utilizando el primer concepto de código de Entity Framework. Sin embargo, cuando se ejecuta el código, la base de datos no se crea (utilizando laDropCreateDatabaseIfModelChanges configuración), aunque el código se está ejecutando bien. Estoy viendo la siguiente excepción cuando intento obtener algo de la base de datos.

Mi proyecto se configura utilizando un separadoDataAccess Capa con un servicio genérico y construcción de repositorio. Así que todas mis entidades, el repositorio y también el contexto de la base de datos están en un proyecto separado dentro de la solución.

Miglobal.asax archivo contiene la siguiente pieza de código.

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext>());

Esto debería inicializar una nueva base de datos si no está allí, ¿verdad?

Mi clase de contexto de base de datos tiene este aspecto;

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

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

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

        /// <summary>
        /// This method prevents the plurarization of table names
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
        }
    }
}

He creado esta clase siguiendo varios tutoriales y artículos en Internet. Todo es nuevo para mí, pero por lo que puedo ver, todo parece correcto hasta ahora. Así que ahora las dos entidades que estoy usando. Se llaman 'Proyecto' y 'Cartera'. Se ven así;

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<Project> Projects { get; set; }
    }

Y

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; }
    }

La base de datos que estoy usando se está ejecutando en un servidor externo, vino con el proveedor de alojamiento que estoy usando. Tengo una base de datos SQL Server en funcionamiento y la cadena de conexión a la base de datos está en elweb.config del proyecto del sitio web. Ya intenté eliminar la base de datos y dejé que el código la volviera a crear, lo que desafortunadamente no funcionó. ¿Me estoy perdiendo algo obvio aquí? ¿O podría ser algo simple como derechos de acceso al servidor para crear bases de datos?

Nota: cuando corro elDatabase-Update -Script comando para generar código SQL, parece que se crean las instrucciones SQL correctas para crear todas las tablas.

ACTUALIZACIÓN 1: Bien, gracias a algunos comentarios he venido un poco más lejos. He agregado dos propiedades a mis entidades para forzar algunos cambios y también he creado un inicializador personalizado como este;

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

        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);
        }
    }

También he eliminado el inicializador del constructor de mi contexto, por lo que esto significa que he eliminado esta línea de código;

Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>());

Después de eso, he agregado estas tres líneas a mi archivo Global.asax;

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

Al depurar ahora estoy recibiendo esta excepción;

Esto me da la siguiente información:

InnerException dice: el proveedor no devolvió un ProviderManifestTokenLa InnerException en la InnerException dice: "Para esta operación se requiere una conexión a la base de datos maestra. No se puede establecer una conexión a través de la base de datos 'maestra' porque la conexión original está abierta y las referencias se han eliminado de la conexión. una conexión no abierta "

Después de estas acciones, la base de datos es inaccesible, por lo que probablemente se eliminará

¿Qué se puede hacer al respecto? Es muy probable que no pueda acceder a la base de datos maestra porque mi proveedor de alojamiento no me da el derecho de acceso adecuado, por supuesto.

Respuestas a la pregunta(4)

Su respuesta a la pregunta