2016-11-03 21 views
-2

現在、Entity Frameworkを学習中です。より良いことを学ぶために、私はレンタカーアプリケーションを作成し、expediaからいくつかのアイディアを取ることにしました。Entity Frameworkはシードしません

私のシードは動作しませんが、この時点で私のプログラムは動作します。

私はこのコードの改善のための提案、および私が経験している問題を解決する方法に開放しています。レポへ

おかげ

リンク:https://github.com/tharion85/Car-Rental

このガイドに従って行なっ:あなたのCarInitializerクラスがDropCreateDatabaseIfModelChangesから継承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

答えて

1

これは、それはモデルが変更された場合にのみ、ドロップ作成し、シードを実行することを意味し。たとえば、Customerモデルに別のプロパティを追加するなどして試すことができます。これを行うと、データベースが再作成され、シードが実行されます。 あなたは常にDropCreateDatabaseAlwaysからクラスを継承し、データベースを再作成する場合ので、この変更:これに

public class CarInitializer : DropCreateDatabaseIfModelChanges<CarContext> 

public class CarInitializer : DropCreateDatabaseAlways<CarContext> 

Customerが依存しているため、現在の種子は正常に実行されないことに気づきますCarですので、まず車を作成してからその参照を顧客に追加する必要があります。また、rentStartrentEndのプロパティを忘れてしまった。たとえば、種子は次のようになります。

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

ありがとうございます。私はすでにrentStartとrentEndで顧客を更新しました。今は、FOREIGN KEY制約 "FK_dbo.Customers_dbo.Cars_Id"と競合するINSERTステートメントでエラーが発生しています。競合はデータベース "carRental1"、テーブル "dbo.Cars"、列 "Id"で発生しました。 ステートメントが終了しました。 31行目のエラー:context.SaveChanges(); –

+0

私はすでにあなたに言った。 costumerに車の参照を追加します。したがって、たとえば、 'new Customer {Car = cars.First()...}' – SteppingRazor

関連する問題