2016-07-19 80 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中添加了一個標量屬性。但仍然沒有成功。 –