2013-04-30 192 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());