更新数据库时的 Stackoverflow

如何解决更新数据库时的 Stackoverflow

我正在播种一类汽车,其中有一个模型类(带有 int 属性 ModelId)和一个品牌类(再次带有 ClassId)。从 .csv 表中读取种子。我怀疑问题出在外键上,或者我必须在其他地方建立适当的关系,但我为此付出了很多努力。

我的解析器如下:

    public static class CarSeeder
    {
        public static void Seed(this ModelBuilder modelBuilder)
        {
            var data = LoadData();

            var models = CreateModels(data);
            modelBuilder.Entity<Model>().HasData(models);

            var brands = CreateBrands(data);
            modelBuilder.Entity<Brand>().HasData(brands);

            var cars = CreateCars(data,brands,models);
            modelBuilder.Entity<Car>().HasData(cars);

            //modelBuilder.Entity<Car>(b =>
            //{
            //    b.HasData(cars);
            //    b.HasOne(e => e.Brand).WithMany(x=>x.Cars).HasForeignKey(x=>x.BrandId);
            //    b.HasOne(z => z.Model).WithMany(x=>x.Cars).HasForeignKey(x => x.ModelId);

            //});
            //    }

        }
        private static List<Dictionary<string,string>> LoadData()
        {
            var cars = new List<Dictionary<string,string>>();
            var path = @"D:\the path of the file";
            using (textfieldparser parser = new textfieldparser(path))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");

                while (!parser.EndOfData)
                {
                    var car = new Dictionary<string,string>();
                    string[] fields = parser.ReadFields();
                    car.Add("make",fields[46]);
                    car.Add("year",fields[63]);
                    car.Add("model",fields[47]);
                    car.Add("type",fields[62]);
                    car.Add("fuel",fields[31]);
                    car.Add("trany",fields[57]);
                    car.Add("cyllinders",fields[22]);

                    cars.Add(car);
                }
            }

            return cars;
        }

        private static List<Model> CreateModels(List<Dictionary<string,string>> carColl)
        {
            var countryNames = GetUniqueColumnValues(carColl,column: "model");

            var models = new List<Model>();
            var idCounter = 1;

            foreach (var name in countryNames)
            {
                models.Add(new Model() { Id = idCounter++,Name = name });
            }

            return models;
        }

        private static List<Brand> CreateBrands(List<Dictionary<string,string>> carColl)
        {
            var brands = GetUniqueColumnValues(carColl,column: "make");

            var brandList = new List<Brand>();
            var counter = 1;


            foreach (var name in brands)
            {
                brandList.Add(new Brand() { Id = counter++,Name = name });
            }

            return brandList;
        }

        private static HashSet<string> GetUniqueColumnValues(List<Dictionary<string,string>> table,string column)
        {
            var uniqueValues = new HashSet<string>();

            foreach (var row in table)
            {
                uniqueValues.Add(row[column]);
            }

            return uniqueValues;
        }
        private static List<Car> CreateCars(List<Dictionary<string,string>> carColl,List<Brand> brands,List<Model> models)
        {
            var carMod = new List<Car>();
            var counter = 1;

            foreach (var car0 in carColl)
            {
                var brand = brands.Where(x => x.Name == car0["make"]).FirstOrDefault().Id;
                var model = models.Where(x => x.Name == car0["model"]).FirstOrDefault().Id;
           
                var car = new Car()
                {
                    Id = counter,ModelId =  model,BrandId = brand,Cyllinders = car0["cyllinders"],Fuel = car0["fuel"],Type= car0["type"],Year =car0["year"],Transmission = car0["trany"],};

                carMod.Add(car);
                counter++;
            }

            return carMod;
        }      
    }
}

OnModelCreating 中的关系如下。

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    //builder.Entity<Car>().HasKey(k => k.Id);

    //builder.Entity<Model>().HasKey(k => k.Id);

    //builder.Entity<Brand>().HasKey(k => k.Id);
    //builder.Entity<Brand>().HasMany(x => x.Cars).WithOne(x => x.Brand).HasForeignKey(x => x.BrandId);
    //builder.Entity<Model>().HasMany(x => x.Cars).WithOne(x => x.Model).HasForeignKey(x => x.ModelId);

    builder.Entity<Repair>().HasKey(k => k.Id);

    builder.Entity<Log>().HasKey(k => k.Id);

    builder.Entity<IdentityRole>().HasData(SeedRoles.Roles);

    builder.Seed();
    builder.SeedCounties();
    builder.SeedRepairs();
}

有没有人知道这种关系有什么问题?当我尝试更新数据库时,它会在 PM 控制台中引发 Stack Overflow。我在创建汽车时尝试使用非常模型而不是他们的 ID,但无济于事。 提前致谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?