【问题标题】:Entity Framework does not seed实体框架不播种
【发布时间】:2016-11-03 19:51:10
【问题描述】:

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

此时我的程序可以工作了,我可以从数据库中添加、编辑、删除,虽然我的种子不起作用。

我愿意接受有关改进此代码以及如何解决我遇到的问题的任何建议。

谢谢

回购链接: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

【问题讨论】:

    标签: c# entity-framework seed


    【解决方案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();
        }
    

    【讨论】:

    • 谢谢你。我已经用rentStart 和rentEnd 更新了客户。现在,我遇到 INSERT 语句与 FOREIGN KEY 约束“FK_dbo.Customers_dbo.Cars_Id”冲突的错误。冲突发生在数据库“carRental1”、表“dbo.Cars”、列“Id”中。该语句已终止。第 31 行出错:context.SaveChanges();
    • 我已经告诉过你了。将汽车引用添加到客户。例如new Customer {Car = cars.First() ... }
    猜你喜欢
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多