MVC4 - 首先是EF代码

时间:2013-04-30 13:15:25

标签: entity-framework asp.net-mvc-4

我正在学习代码第一种方法。

我用:

创建了一个EbuyDataContext4.cs文件
namespace Ebuy.Website.Models
{
    public class EbuyDataContext4 : DbContext
    {
        public DbSet<Auction> Auctions { get; set; }
    }
}

我用它根据模型创建和保存一个表单。

我有两个问题:

  1. 保存数据的位置?
  2. 如果我更改了模型中的某些内容,我会收到一条错误,指出我的dbContext因为这些更改而出现问题。我通过删除它并创建另一个dbContext来解决它(现在我有dbContext3),但我想有一种更聪明的方法来解决这个错误......

3 个答案:

答案 0 :(得分:1)

当你从Scratch开始一个新项目时,首先使用代码的方法非常有用。

首先,数据将保存在与DataContext同名的数据库中,在您的情况下是EbuyDataContext4。 EF将从指定的模型创建整个数据库。

其次,当您采用Code-First的方式时,每次更新任何类模型时都必须在数据库中更新它,因此请将此代码放在App_Start下面:

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

希望对你有所帮助!并查看Entity Framework Code First以获取更多信息!

答案 1 :(得分:0)

1 - 默认情况下,Entity Framework在本地SQL Express实例上创建一个数据库,其名称/命名空间与dbcontext相同。

2 - 您应该查看代码优先迁移(http://msdn.microsoft.com/en-us/data/jj591621.aspx)这样您就可以在不重新创建模型的情况下更改模型。

答案 2 :(得分: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());