-2

我正在学习代码优先方法。

我创建了一个 EbuyDataContext4.cs 文件:

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

我用它来创建和保存基于模型的表单。

我有两个问题:

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

3 回答 3

1

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

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

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

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

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

于 2013-04-30T13:27:37.210 回答
0

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

2-您应该查看 Code First Migrations ( http://msdn.microsoft.com/en-us/data/jj591621.aspx ) 这允许您更改模型而无需重新创建您正在做的事情。

于 2013-04-30T13:25:16.930 回答
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());
于 2013-04-30T13:25:28.873 回答