2016-11-03 5 views
-2

현재 Entity Framework를 배우고 있습니다. 더 나은 방법을 배우기 위해 렌터카 응용 프로그램을 만들고 expedia에서 몇 가지 아이디어를 얻으려고했습니다.Entity Framework에서 시드하지 않습니다.

내 프로그램이 작동하면서 내 시드가 작동하지 않지만 데이터베이스에서 추가, 편집, 삭제할 수 있습니다.

이 코드의 개선을위한 제안 사항과 해결 방법은 공개되어 있습니다.

감사

링크의 repo에 :이 가이드 다음 https://github.com/tharion85/Car-Rental

을 완료 : 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

귀하의 CarInitializer 클래스가이 그것을 드롭 만들고 모델이 변경된 경우에만 씨앗을 실행하는 것을 의미합니다 DropCreateDatabaseIfModelChanges에서 상속 . 예를 들어 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