2016-07-19 9 views
-1

Ich benutze Code zuerst Approach in Entity Framework, aber ich bin nicht in der Lage, die Standarddaten in die Tabelle zu seed. Bitte helfen Sie.Entity Framework Code Erste Aussaat Daten

Modelle

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>(); 
     } 

    } 

Initializer

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(); 
     } 
    } 

Haupt App

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

Welche EF-Version verwenden Sie? Seeding hat sich mit verschiedenen Versionen geändert. – WillC

+0

EF Version 6.1.3 –

Antwort

0

Für die Version 6 von Entity Framework 'Migrationen' verwendet, ist die bevorzugte Art und Weise der Datenbank auf der Version, die "Configuration.Seed" Methode, wie in diesem Tutorial gezeigt:

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

Haben Sie versucht, "Update-Database" von der Package Manager Console auszuführen, damit es funktioniert?

Ich weiß, ich hatte Probleme mit der älteren Seeding-Methode mit EF6. Migrationen haben sich auch für Entity Framework Core 1 (früher EF7) geändert. Stellen Sie daher sicher, dass Sie die korrekte Technik auf die richtige Version anwenden.

+0

Ich versuchte es auf die gleiche Weise und es funktionierte, aber warum der obige Ansatz funktioniert nicht in EF 6. Irgendwelche Idee? –

+0

Ich denke es ist mit der Vererbung der Klasse aus dem DatabaseContext, die die Seed-Methode nicht korrekt aufruft. Siehe: http://stackoverflow.com/questions/25524238/seed-method-not-called-entity-framework-6 – WillC

0

Versuchen Sie db

Auf meinem Rechner tatsächlich abfragt, die Seeder läuft, wenn ich es abfragen für der erste ti mich.

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

Es zeigt mir Tabelle existiert bereits –

+0

@ S.Sagar Nun, wenn Ihre db bereits existiert, dann wird es nicht neu seed. Die 'DropCreateDatabaseIfModelChanges' werden nur neu initialisiert, wenn sich das Datenbankmodell ändert oder wenn Sie die Datenbank löschen. –

+0

Ich habe das Modell geändert und außerdem eine Skalareigenschaft in der Mitarbeiterklasse hinzugefügt. Aber immer noch kein Erfolg. –

Verwandte Themen