entity-framework - 不使用 Entity Framework 代码优先调用种子方法

标签 entity-framework entity-framework-4 ef-code-first code-first

自 4.1 以来,我一直在努力解决这个问题(现在我在 4.3 上)。在我看来,要调用种子方法,我要做的就是以下几点:

1)在sqlserver上创建一个空的数据目录
2)执行以下代码:

Database.SetInitializer(new DropCreateDatabaseAlways<SiteDB>());

我的 SiteDB 定义如下:
public class SiteDBInitializer : 
    DropCreateDatabaseAlways<SiteDB>
{
    protected override void Seed(SiteDB db)
    {
           ... (break point set here that never gets hit)

我觉得我必须遗漏一些非常简单的东西,因为这会创建我的表,但不会调用种子方法。

为了更清楚地说明这一点,这是一个包含所有代码的完整示例。当我运行它时,种子永远不会被调用:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Data.Entity;

namespace ConApp
{
internal class Program
{
    private static void Main(string[] args)
    {
        Database.SetInitializer(new SiteDBInitializer());
        using (var db = new SiteDB())
        {
            var x = db.Customers;
        }
    }
}

public class SiteDB : DbContext
{
    public DbSet<Customer> Customers { get; set; }
}

public class Customer
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    public string LastName { get; set; }
}

public class SiteDBInitializer :
    DropCreateDatabaseAlways<SiteDB>
{
    protected override void Seed(SiteDB db)
    {
        db.Customers.Add(new Customer() {LastName = "Kellner"});
        db.Customers.Add(new Customer() {LastName = "Jones"});
        db.Customers.Add(new Customer() {LastName = "Smith"});
        db.SaveChanges();
    }
}

}

最佳答案

您需要调用Database.SetInitializer(new SiteDBInitializer());反而。

关于entity-framework - 不使用 Entity Framework 代码优先调用种子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9322265/

相关文章:

c# - Entity Framework 4 : How to find the primary key?

c# - 数据库优先 Entity Framework 将唯一外键映射为一对多

asp.net - 如何使用 Entity Framework 代码优先实现在迁移时更新每一行的唯一值

c# - 从 Entity Framework 中自动生成的类继承

entity-framework - 属性 'Id'是对象关键信息的一部分,不可修改

wcf - 在 SOA 应用程序中使用 DTO 的最佳方式是什么?

sql - NHibernate/EF Linq 中的案例声明

c# - 如何首先在多个表的 Entity Framework 代码中植入身份种子值

entity-framework - EF Code First CTP5 - 使用属性名称作为外键的列名

c# - 如何在 Entity Framework Code First 中的子集合上创建表达式