2013-04-30 184 views
-2

我正在學習代碼的第一種方法。MVC4 - EF代碼優先

我創建了一個EbuyDataContext4.cs文件:

namespace Ebuy.Website.Models 
{ 
    public class EbuyDataContext4 : DbContext 
    { 
     public DbSet<Auction> Auctions { get; set; } 
    } 
} 

我用它在創建和保存基於模型一種形式。

我有2個問題:

  1. 在數據被保存?
  2. 如果我改變模型中的東西,我收到一個錯誤,我的dbContext有一個問題,因爲這些更改。我解決它,刪除它,並創建另一個的DbContext(現在我有dbContext3),但我想有一個解決這個錯誤的明智之選...
+0

值得指出的是,MSDN文檔很好地解釋了所有這些;一個快速的谷歌會爲你解決這個問題。 – anaximander 2013-04-30 13:43:42

回答

1

當您從Scratch開始一個新項目時,首先使用代碼的方法非常有用。

首先,數據將被保存在與DataContext同名的數據庫中,您的情況是EbuyDataContext4。 EF將從指定的模型創建整個數據庫。

其次,你正在服用的代碼優先的辦法,每次更新任何類模型,你必須更新數據庫,所以在App_Start把下面這段代碼:

protected void Application_Start() 
{ 
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EbuyDataContext>()); 
} 

希望它能幫助你!在這裏看看Entity Framework Code First瞭解更多信息!

+2

謝謝!雖然我真的更喜歡DB-first方法,因爲我喜歡在開始編程之前設計表格。但我想知道所有的方法是很好的。 – 2013-04-30 13:30:16

0

1 - 默認情況下,實體框架在創建一個數據庫本地SQL Express實例具有與您的dbcontext相同的名稱/名稱空間。

2-你應該看看Code First Migrations(http://msdn.microsoft.com/en-us/data/jj591621.aspx)這允許你改變你的模型而不需要重新創建你正在做的事。

+0

1.我在哪裏可以看到它? :)(app_data文件夾爲空)\ – 2013-04-30 13:28:28

+0

EF創建的數據庫未包含在解決方案中,請單擊以查看所有隱藏的文件。如果不存在,EF會在默認的數據庫(在Asp.net默認的sql instace中配置)中創建它。如果你有它,可能是Express安裝! – Fals 2013-04-30 13:39:16

0

要知道數據保存的位置,請查看您的web.config。 首先看看你正在使用什麼上下文,如果你沒有指定進一步你可能會使用DefaultConnection(在web.config中搜索此字符串)。

事實上,如果您更改模型,那麼會導致應用程序崩潰,因爲它仍然針對未更新的數據庫運行(不反映您的更改)。

用於測試和開發(不生產,雖然;))

我建議你使用一個初始化,這將確保初始數據和結構,而你還在用它擺弄。

創建一個包含初始化代碼某處你的項目中的文件(只是樣品標識符):

namespace DataAccess.DAL 
{ 
    using System.Collections.Generic; 
    using System.Data.Entity; 

    /// <summary> 
    /// This class initializes the ArticleContext's data every time something in the model (POCOs) changed 
    /// </summary> 
    public class Initializer : DropCreateDatabaseIfModelChanges<DbContext> 
    { 
     /// <summary> 
     /// Seeds the specified context. 
     /// </summary> 
     /// <param name="context">The context.</param> 
     protected override void Seed(DbContext context) 
     { 
//place initializer code here 
      //var items = new List<Item); 
      //items .ForEach(a => context.Items.Add(a)); 
      //context.SaveChanges(); 
     } 
    } 
} 

您可能需要一些參考在Global.asax中電線加起來就是你的項目...... 那麼你初始值設定項:

Database.SetInitializer<DbContext>(new Initializer());