2016-07-19 73 views
-1

我在实体框架中使用代码第一种方法,但我无法将默认数据播种到表中。请帮忙。实体框架代码首先播种数据

模型

public class Employee 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Gender { get; set; } 
     public int Salary { get; set; } 


     public virtual Department Departments { get; set; } 

    } 
public class Department 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Location { get; set; } 
     public virtual ICollection<Employee> Employees { get; set; } 

     public Department() 
     { 
      this.Employees = new List<Employee>(); 
     } 

    } 

初始化程序

public class DepartmentInitializer : DropCreateDatabaseIfModelChanges<EmployeeDBContext> 
    { 
     protected override void Seed(EmployeeDBContext context) 
     { 
      IList<Department> lst = new List<Department> 
      { 
       new Department 
       { 
        Name = "Developer", 
        Location = "Bangalore" 
       }, 
       new Department 
       { 
        Name = "Tester", 
        Location = "Bangalore" 
       }, 
       new Department 
       { 
        Name = "IT Services", 
        Location = "Chennai" 
       } 
      }; 
      foreach (var item in lst) 
      { 
       context.Departments.Add(item); 
      } 
      context.SaveChanges(); 
     } 
    } 

主要应用

class Program 
    { 
     static void Main(string[] args) 
     { 
      using (var db = new EmployeeDBContext()) 
      { 
       Database.SetInitializer<EmployeeDBContext>(new DepartmentInitializer()); 
      } 
     } 
    } 
+0

您使用的是哪种版本的EF?播种已经改变了不同的版本。 – WillC

+0

EF版本6.1.3 –

回答

0

对于实体框架6版,采用“迁移”是如本教程版本的首选方式的数据库,使用“Configuration.Seed”的方法:

http://www.asp.net/web-api/overview/data/using-web-api-with-entity-framework/part-3

您是否尝试从软件包管理器控制台运行“Update-Database”以使其运行?

我知道我在使用EF6的老式播种方法时遇到了问题。实体框架Core 1(以前称为EF7)的迁移也发生了变化,因此请确保将正确的技术应用于正确的版本。

+0

我试过同样的方式,它工作,但为什么上述方法在EF 6中不起作用。任何想法? –

+0

我认为它是从DatabaseContext类继承而不是正确调用种子方法。参见:http://stackoverflow.com/questions/25524238/seed-method-not-called-entity-framework-6 – WillC

0

尝试实际上查询您的分贝

在我的机器,播种机运行时,我查询它第一个ti我。

using (var db = new EmployeeDBContext()) 
{ 
    Database.SetInitializer<EmployeeDBContext>(new DepartmentInitializer()); 
    var depts = db.Departments.ToList(); 
} 
+0

它显示我的表已经存在 –

+0

@ S.Sagar好吧,如果你的数据库已经存在,那么它不会重新播种它。如果数据库模型更改或删除数据库,则“DropCreateDatabaseIfModelChanges”只会重新种子。 –

+0

我改变了模型,还在Employee Class中添加了一个标量属性。但仍然没有成功。 –