【问题标题】:Seed Method in EF Code-FirstEF Code-First 中的种子方法
【发布时间】:2012-12-17 14:26:41
【问题描述】:

我正在尝试使用 EF 的 Seed 方法用一些示例数据填充我的数据库,但是当我尝试运行它时,没有填充数据。

有人知道为什么吗? 谢谢。

数据库上下文:

public void Seed(EFloristEntities context)
{
    new List<Product>
    {
        new Product() { Id = 1, ProductName = "Product 1", ProductDescription = "a", Price = 1.0}
    }.ForEach(i => context.Products.Add(i));

    context.SaveChanges();
}

public DbSet<Product> Products { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<OrderDetails> OrderDetails { get; set; }
public DbSet<Cart> Cart { get; set; }

我的初始化器:

public class CreateInitializer : CreateDatabaseIfNotExists<EFloristEntities>
{
    protected override void Seed(EFloristEntities context)
    {
        context.Seed(context);

        base.Seed(context);
    }
}

全球.aspx:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFloristEntities>()); 
new EFloristEntities().Database.CreateIfNotExists();

Database.SetInitializer(new CreateInitializer());

【问题讨论】:

  • 嗯...global.aspx? :)

标签: c# asp.net entity-framework ef-code-first


【解决方案1】:

您根本没有在全局文件中初始化数据库。您需要运行以下代码:

EFloristEntities.Database.Initialize(true)

如果您想使用自定义初始化程序,我建议您将此代码放在 Database.SetInitializer(new CreateInitializer()) 调用下方。

【讨论】:

  • 我对此进行了测试但没有成功:( using (var context = new EFloristEntities()) { context.Database.Initialize(true); }
  • 您的数据库已经创建了吗?如果是这样,您将需要使用不同的初始化程序(如上面的@kpadmanabhan)
【解决方案2】:

您已将初始化程序配置为使用 DropCreateDatabaseIfModelChanges。尝试将其替换为 DropCreateDatabaseAlways 一次。

【讨论】:

    【解决方案3】:

    看起来您在调用自己的种子代码之后调用了基本初始化程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多