Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Принуждаване на първо код винаги да инициализира несъществуваща база данни?

Инициализатор се изпълнява, когато имате нужда от достъп до базата данни, така че ако искате да създадете база данни при стартиране на приложението, използвайте нещо от следното:

    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 Реализация на IDatabaseInitializer, която ще пресъздаде и по желание ще зареди повторно базата данни с данни само ако базата данни не съществува. За да заредите базата данни, създайте производен клас и заменете метода за зареждане.

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

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

DropCreateDatabaseIfModelChanges Реализация на IDatabaseInitializer, която ще изтрие, пресъздаде и по желание ще зареди отново базата данни с данни само ако моделът е променен след създаването на базата данни. Това се постига чрез записване на хеш на модела на магазина в базата данни, когато се създава, и след това сравняване на този хеш с такъв, генериран от текущия модел. За да заредите базата данни, създайте производен клас и заменете метода за зареждане.

Database.SetInitializer(new DropCreateDatabaseIfModelChanges());

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

DropCreateDatabaseAlways

Реализация на IDatabaseInitializer, която винаги ще създава отново и по избор ще зарежда отново базата данни с данни при първото използване на контекст в домейна на приложението. За да заредите базата данни, създайте производен клас и заменете метода за зареждане.

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

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

Препоръчвам ви да разгледате Миграции ако искате да проследите, върнете промените, които сте направили във вашата DB към предишното състояние http ://msdn.microsoft.com/hr-hr/data/jj591621 .

АКТУАЛИЗАЦИЯ

context.Database.Initialize(true);

За MVC приложение добавете раздел към Application_Start() метод в 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);
     }    
}

Също така можете да използвате персонализиран инициализатор:

public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{

}

и след това използвайте

Database.SetInitializer(new MyDbInit());

АКТУАЛИЗАЦИЯ 2

Направете ново празно MVC4 приложение, наречено DeleteDBOnEveryRequest .Поставете следното в 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);
            }    
        }

Създайте нов контролер, наречен DatabaseController с две действия.

ВДостъп действие изтривате DB и пренасочвате към Пресъздаден действие, откъдето създавате DB, тъй като преди това е била изтрита.

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

Това ли искахте?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на курсор в dbMail в sql сървър 2008

  2. Какво е уникално ограничение в SQL Server - SQL Server / TSQL урок, част 95

  3. Висока наличност на SQL Server:Инсталирайте клъстерен екземпляр за преодоляване на отказ на SQL Server, част 2

  4. Използвайте APP_NAME(), за да получите името на приложението на текущата сесия в SQL Server

  5. Колко ефективна е функцията YEAR(дата)?