2016-03-29 97 views
1

如果我運行在包管理器控制檯下面的代碼:實體Framwork的Code First遷移

-Update-Database -Force 

除了運行一些默認的數據表,我還以爲所有的表被清潔的種子法之前,但這似乎是不正確的!?

編輯:

我還是覺得很奇怪,爲什麼在數據庫中的表,當我運行-update數據庫-force沒有DROP掉,如果他們不這樣做呢?爲什麼每次運行-update-database時,使用Seed方法添加的數據都會繼續添加數據。再次,不應該prevoius添加的數據被覆蓋?當我從ASP.NET這個鏈接和其他來源閱讀下面的文本看起來應該有可能用新數據播種,舊數據或表應該被丟棄!?我是否誤解了這一點,或者我做錯了什麼?

You have configured the Entity Framework to automatically drop and 
re-create the database each time you change the data model. When you 
add, remove, or change entity classes or change your DbContext class, 
the next time you run the application it automatically deletes your 
existing database, creates a new one that matches the model, and seeds 
it with test data. 
+0

如果你刪除數據庫,你應該有一個初始化程序集來創建一個新的程序 – Ortund

+0

@Ortund我是ASP.NET MVC的新手,在研究過程中的以前的項目中,我記得剛剛刪除了DB,然後鍵入一些命令或它是由Visual Studio創建的,但我可能是錯的?你是什​​麼意思與初始化? –

+0

我會在一個答案中解釋,但你不需要接受它,除非它工作 – Ortund

回答

2

使用實體框架代碼首先,你可以有你的MVC項目中刪除,並且當它運行使用Database Initializers重新創建數據庫。

//Global.asax.cs 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     // instanciate your DbContext class 
     OrtundEntities db = new OrtundEntities(); 
     db.Database.Initialize(true); // this calls your chosen initializer 
     db.Seed(); 
    } 

// OrtundEntities 
    public OrtundEntities() 
     : base("DefaultConnection") 
    { 
     Database.SetInitializer<OrtundEntities>(DropCreateDatabaseAlways); 
    } 

這將始終刪除並創建數據庫在運行MVC的網站(我相信只要用戶訪問它,以及因此只能使用DropCreateDatabaseAlways用於測試目的)。

或者,如果只有一個或兩個表需要清空,以下內容在您的控制器中可以正常工作。這有利於保持所有其他數據的完整性,並只清空要清空的表格。

public JsonResult ClearAll() 
    { 
     try 
     { 
      // clears the Receipts and Rewards tables 
      db.Database.ExecuteSqlCommand("truncate table Receipts"); 
      db.Database.ExecuteSqlCommand("truncate table Rewards"); 

      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception ex) 
     { 
      return Json(ex.Message, JsonRequestBehavior.AllowGet); 
     } 
    } 

編輯

我忘了提,如果你用上面的函數截斷表具有關係型數據,其他表的依賴那麼任何查詢這些表很可能會導致錯誤。

+0

感謝您的答案!我將在稍後嘗試代碼 –

相關問題