Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmuszając kod, aby zawsze inicjować nieistniejącą bazę danych?

Inicjator jest wykonywany, gdy potrzebujesz uzyskać dostęp do bazy danych, więc jeśli chcesz utworzyć bazę danych w aplikacji, użyj dowolnego z poniższych:

    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

CreateDatabaseIfNotExists Implementacja IDatabaseInitializer, która ponownie utworzy i opcjonalnie ponownie zaszczepi bazę danych danymi tylko wtedy, gdy baza danych nie istnieje. Aby zasiać bazę danych, utwórz klasę pochodną i zastąp metodę Seed.

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

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

DropCreateDatabaseIfModelChanges Implementacja IDatabaseInitializer, która usunie, ponownie utworzy i opcjonalnie ponownie zaszczepi bazę danych danymi tylko wtedy, gdy model zmienił się od czasu utworzenia bazy danych. Osiąga się to poprzez zapisanie skrótu modelu sklepu do bazy danych podczas jego tworzenia, a następnie porównanie tego skrótu z hashem wygenerowanym z bieżącego modelu. Aby zasiać bazę danych, utwórz klasę pochodną i zastąp metodę Seed.

Database.SetInitializer(nowy DropCreateDatabaseIfModelChanges());

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

DropCreateDatabaseAlways

Implementacja IDatabaseInitializer, która zawsze będzie odtwarzać i opcjonalnie ponownie wypełniać bazę danych danymi przy pierwszym użyciu kontekstu w domenie aplikacji. Aby zasiać bazę danych, utwórz klasę pochodną i zastąp metodę Seed.

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

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

Polecam zajrzeć na Migracje jeśli chcesz śledzić, przywróć zmiany wprowadzone w bazie danych do poprzedniego stanu http ://msdn.microsoft.com/hr-hr/data/jj591621 .

AKTUALIZUJ

context.Database.Initialize(true);

W przypadku aplikacji MVC dodaj sekcję do Application_Start() metoda w 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);
     }    
}

Możesz również użyć niestandardowego inicjatora:

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}

a następnie użyj

Database.SetInitializer(new MyDbInit());

AKTUALIZACJA 2

Utwórz nową pustą aplikację MVC4 o nazwie DeleteDBOnEveryRequest .Umieść następujące informacje w 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);
            }    
        }

Utwórz nowy kontroler o nazwie DatabaseController z dwoma akcjami.

W Dostępie działanie polegające na usunięciu bazy danych i przekierowaniu do Odtworzonego akcja, z której tworzysz bazę danych, tak jak została ona wcześniej usunięta.

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

Czy tego chciałeś?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008:Wyłącz indeks na jednej partycji tabeli

  2. Krąg serwera SQL

  3. Rekurencja CTE w SQL Server 2008

  4. Jak zainstalować SQL Server w SUSE 12?

  5. Typy kursorów programu SQL Server — co to są kursory statyczne w programie SQL Server | Samouczek SQL Server / Samouczek TSQL