实体框架不播种

本文关键字:框架 实体 | 更新日期: 2023-09-27 18:16:25

我目前正在学习实体框架。为了更好地学习,我决定创建一个汽车租赁应用程序,借鉴了expedia等公司的一些想法。

在这一点上,我的程序工作,我可以添加,编辑,删除数据库,虽然我的种子不工作。

我是开放的任何建议的改进这段代码,以及如何解决问题,我正在经历。

感谢

链接到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

实体框架不播种

您的CarInitializer类继承自DropCreateDatabaseIfModelChanges,这意味着它将丢弃,创建和运行种子只有当模型已经改变。例如,您可以通过向Customer模型添加另一个属性来尝试。如果这样做,将重新创建数据库并执行seed。如果您希望始终重新创建数据库,从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();
    }