2016-11-03 4 views
-2

Ich lerne derzeit Entity Framework. Um es besser zu lernen, beschloss ich, eine Autovermietungsanwendung zu erstellen, einige Ideen von Expedia, etc.Entity Framework seed

An diesem Punkt mein Programm funktioniert, kann ich hinzufügen, bearbeiten, löschen aus der Datenbank, obwohl mein Saatgut nicht funktioniert.

Ich bin offen für alle Vorschläge zur Verbesserung dieses Codes und wie ich das Problem beheben kann.

Dank

Link zu Repo: https://github.com/tharion85/Car-Rental

im Anschluss an diese Führung Done: https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

Antwort

1

Ihre CarInitializer Klasse erbt von DropCreateDatabaseIfModelChanges dies bedeutet, wird fallen, erstellen und Samen nur ausgeführt, wenn das Modell geändert hat . Sie können es versuchen, indem Sie zum Beispiel eine weitere Eigenschaft zu Ihrem Customer Modell hinzufügen. Wenn Sie dies tun, wird die Datenbank neu erstellt und der Seed wird ausgeführt. Wenn Sie wollen immer die Datenbank erstellen Sie Ihre Klasse von DropCreateDatabaseAlways erben so das ändern:

public class CarInitializer : DropCreateDatabaseIfModelChanges<CarContext> 

dazu:

public class CarInitializer : DropCreateDatabaseAlways<CarContext> 

Beachten Sie auch, dass Ihre aktuelle Samen nicht richtig ausgeführt werden, da Customer abhängt Car so müssen Sie zuerst ein Auto erstellen und dann seine Referenz zum Kunden hinzufügen. Auch Sie haben rentStart und rentEnd Eigenschaften vergessen. So kann Ihr Seed beispielsweise so aussehen:

protected override void Seed(CarContext context) 
    { 
     var cars = new List<Car> 
     { 
      new Car { Id=1033, Model="Corolla", Mark="Toyota", hasAC=true, rentalCost=65 } 

     }; 
     cars.ForEach(ca => context.Cars.Add(ca)); 

     var customers = new List<Customer> 
     { 
      new Customer {Car = cars.First(), FirstName="Carson", LastName="Alexander", Address="183 Court Road", ZipCode="T7D 0C1", City="Toronto", rentStart = DateTime.Now, rentEnd = DateTime.Now }, 
      new Customer {Car = cars.First(), FirstName="Meredith", LastName="Alonso", Address="101 Baseline Rd", ZipCode="V4D 0G2", City="Vancouver", rentStart = DateTime.Now, rentEnd = DateTime.Now }, 
      new Customer {Car = cars.First(), FirstName="Arturo", LastName="Brand", Address="1043 34st", ZipCode="T5Z 3P1", City="Calgary", rentStart = DateTime.Now, rentEnd = DateTime.Now } 
     }; 

     customers.ForEach(c => context.Customers.Add(c)); 
     context.SaveChanges(); 
    } 
+0

Vielen Dank dafür. Ich habe bereits Kunden mit rentStart und rentEnd aktualisiert. Im Moment habe ich einen Fehler bei der INSERT-Anweisung, die mit der FOREIGN KEY-Einschränkung "FK_dbo.Customers_dbo.Cars_Id" in Konflikt steht. Der Konflikt ist in der Datenbank "carRental1", Tabelle "dbo.Cars", Spalte "Id" aufgetreten. Die Anweisung wurde beendet. Fehler in Zeile 31: context.SaveChanges(); –

+0

Ich habe es dir schon gesagt. Fügen Sie dem Kunden die Fahrzeugreferenz hinzu. Also zum Beispiel 'neuer Kunde {Car = cars.First() ...}' – SteppingRazor

Verwandte Themen