我目前正在学习实体框架。为了更好地学习它,我决定创建一个汽车租赁应用程序,从expedia等处获取一些想法。
此时我的程序正常,我可以添加,编辑,删除数据库,虽然我的种子不起作用。
我愿意接受有关此代码改进的任何建议,以及如何解决我遇到的问题。
由于
答案 0 :(得分:1)
您的CarInitializer
类继承自DropCreateDatabaseIfModelChanges
,这意味着只有在模型发生变化时才会删除,创建和运行种子。您可以尝试将其他属性添加到Customer
模型中。如果这样做,将重新创建数据库并执行种子。
如果您想要始终重新创建数据库,请从DropCreateDatabaseAlways
继承您的类,请更改此:
public class CarInitializer : DropCreateDatabaseIfModelChanges<CarContext>
到此:
public class CarInitializer : DropCreateDatabaseAlways<CarContext>
另请注意,由于Customer
取决于Car
,您当前的种子将无法正常运行,因此您首先需要创建一个汽车,然后将其引用添加到客户。您也忘记了rentStart
和rentEnd
属性。例如,您的种子可能如下所示:
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();
}