Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Forcer le code d'abord à toujours initialiser une base de données inexistante ?

Initialiseur est exécuté lorsque vous avez besoin d'accéder à la base de données, donc si vous souhaitez créer une base de données au démarrage de l'application, utilisez l'une des options suivantes :

    context.Database.Initialize(true); //If set to true the initializer is run even if it has already been run.       
    context.Database.Create()

http ://msdn.microsoft.com/en-us/library/system.data.entity.database.initialize(v=vs.103).aspx

CréerDatabaseIfNotExists Une implémentation de IDatabaseInitializer qui recréera et réamorcera éventuellement la base de données avec des données uniquement si la base de données n'existe pas. Pour amorcer la base de données, créez une classe dérivée et remplacez la méthode Seed.

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

http://msdn.microsoft.com/ fr-fr/library/gg679221(v=vs.103).aspx

DropCreateDatabaseIfModelChanges Une implémentation de IDatabaseInitializer qui supprimera, recréera et éventuellement réamorcera la base de données avec des données uniquement si le modèle a changé depuis la création de la base de données. Ceci est réalisé en écrivant un hachage du modèle de magasin dans la base de données lors de sa création, puis en comparant ce hachage avec celui généré à partir du modèle actuel. Pour amorcer la base de données, créez une classe dérivée et remplacez la méthode Seed.

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

http://msdn.microsoft.com/ fr-fr/library/gg679604(v=vs.103).aspx

DropCreateDatabaseAlways

Une implémentation de IDatabaseInitializer qui recréera toujours et réamorcera éventuellement la base de données avec des données la première fois qu'un contexte est utilisé dans le domaine d'application. Pour amorcer la base de données, créez une classe dérivée et remplacez la méthode Seed.

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

http://msdn.microsoft.com/ fr-fr/library/gg679506(v=vs.103).aspx

Je vous recommande de regarder Migrations si vous souhaitez suivre, rétablissez les modifications que vous avez apportées à votre base de données à l'état précédent http ://msdn.microsoft.com/hr-hr/data/jj591621 .

MISE À JOUR

context.Database.Initialize(true);

Pour l'application MVC, ajoutez une section au Application_Start() méthode dans Global.asax

protected void Application_Start() {

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

     // Forces initialization of database on model changes.
     using (var context= new MyContext()) {
          context.Database.Initialize(force: true);
     }    
}

Vous pouvez également utiliser un initialiseur personnalisé :

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}

puis utilisez

Database.SetInitializer(new MyDbInit());

MISE À JOUR 2

Créez une nouvelle application MVC4 vide appelée DeleteDBOnEveryRequest .Mettez ce qui suit dans Global.asax Application_start

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            Database.SetInitializer<BlogContext>(new DropCreateDatabaseAlways<BlogContext>());    

            using (var context = new BlogContext())
            {
                context.Database.Initialize(force: true);
            }    
        }

Créez un nouveau contrôleur appelé DatabaseController avec deux actions.

Dans Accès action que vous supprimez la base de données et redirigez vers Recréé action à partir de laquelle vous créez une BD telle qu'elle a été précédemment supprimée.

namespace DeleteDBOnEveryRequest.Controllers
{
    public class DatabaseController : Controller
    {
        public ActionResult Access()
        {
            using (var context = new BlogContext())
            {
                context.Database.Delete();
            } 
            return RedirectToAction("Recreated");
        }

        public ActionResult Recreated()
        {
            using (var context = new BlogContext())
            {
                context.Database.Initialize(force: true);                
            }
            return View();
        }
    }
}

Est-ce ce que vous vouliez ?