.net 如何在EF Core 2.1中进行播种

.net 如何在EF Core 2.1中进行播种,.net,.net-core,.net,.net Core,在我的普通.NET framework中,我在Configuration.cs中使用了以下代码: protected override void Seed(Athlosify.Models.AthlosifyContext context) { var golfCourses = new List<GolfCourse> { new GolfCourse { Name = "Bonnie Doon Golf Club",

在我的普通.NET framework中,我在Configuration.cs中使用了以下代码:

protected override void Seed(Athlosify.Models.AthlosifyContext context)
    {
        var golfCourses = new List<GolfCourse>
        {
            new GolfCourse { Name = "Bonnie Doon Golf Club", Description = "N/A", Address = "38 Banks Ave", Suburb = "Pagewood", State="NSW", Postcode = "2035", Country = "Australia", Latitude=-33.935189, Longitude=151.222372  },
            new GolfCourse { Name = "Beverly Park Golf Club", Description = "N/A", Address = "87 Jubilee Avenue", Suburb = "Beverly Park", State="NSW", Postcode = "2217", Country = "Australia", Latitude=-33.975506, Longitude=151.131691  }

        };
        golfCourses.ForEach(s => context.GolfCourses.AddOrUpdate(p => p.GolfCourseID, s));
        context.SaveChanges();

        var golfRoundCategories = new List<GolfRoundCategory>
        {
            new GolfRoundCategory { Name = "Competition - Stroke", Description = "N/A" },
            new GolfRoundCategory { Name = "Competition - Stableford", Description = "N/A" },
            new GolfRoundCategory { Name = "Competition - Ambrose", Description = "N/A" },
            new GolfRoundCategory { Name = "Competition - Foresome", Description = "N/A" },
            new GolfRoundCategory { Name = "Practice - 2 Ball Best Balls", Description = "N/A" },
            new GolfRoundCategory { Name = "Practice - 2 Ball Worst Balls", Description = "N/A" },
        };
        golfRoundCategories.ForEach(s => context.GolfRoundCategories.AddOrUpdate(p => p.GolfRoundCategoryID, s));
        context.SaveChanges();

        var golfRounds = new List<GolfRound>
        {
            new GolfRound { Name = "Bonnie Doon GC Practice", Notes = "N/A", UserID = Guid.Parse("7dd950ad-d7b0-448a-b689-db3947e31bec"),
                        GolfCourseID = golfCourses.Single(c => c.Name == "Bonnie Doon Golf Club" ).GolfCourseID,
                        DailyHandicap = 21, GolfRoundCategoryID = golfRoundCategories.Single(c => c.Name == "Practice - 2 Ball Best Balls" ).GolfRoundCategoryID,
                        TeeOffUTC = DateTime.Parse("2018-07-22 15:00") },
        };
        golfRounds.ForEach(s => context.GolfRounds.AddOrUpdate(p => p.GolfRoundID, s));
        context.SaveChanges();
protected override void Seed(Athlosify.Models.AthlosifyContext)
{
var golfCourses=新列表
{
新高尔夫球场{Name=“Bonnie Doon Golf Club”,Description=“N/A”,Address=“38 Banks Ave”,substration=“Pagewood”,State=“NSW”,Postcode=“2035”,Country=“Australia”,纬度=-33.935189,经度=151.222372},
新高尔夫球场{Name=“贝弗利公园高尔夫俱乐部”,Description=“N/A”,Address=“87 Jubilee Avenue”,subcountry=“贝弗利公园”,State=“NSW”,Postcode=“2217”,Country=“澳大利亚”,纬度=-33.975506,经度=151.131691}
};
ForEach(s=>context.golfCourses.AddOrUpdate(p=>p.GolfCourseID,s));
SaveChanges();
var golfRoundCategories=新列表
{
新GolfRoundCategory{Name=“Competition-Stroke”,Description=“N/A”},
新的GolfRoundCategory{Name=“Competition-Stableford”,Description=“N/A”},
新GolfRoundCategory{Name=“Competition-Ambrose”,Description=“N/A”},
新GolfRoundCategory{Name=“Competition-Foresome”,Description=“N/A”},
新GolfRoundCategory{Name=“Practice-2 Ball Best Balls”,Description=“N/A”},
新高尔夫类别{Name=“练习-2球最差球”,Description=“N/A”},
};
ForEach(s=>context.golfRoundCategories.AddOrUpdate(p=>p.golfroundcategorid,s));
SaveChanges();
var golfRounds=新列表
{
新GolfRound{Name=“Bonnie Doon GC Practice”,Notes=“N/A”,UserID=Guid.Parse(“7dd950ad-d7b0-448a-b689-db3947e31bec”),
GolfCourseID=golfCourses.Single(c=>c.Name==“邦妮•杜恩高尔夫俱乐部”)。GolfCourseID,
DailyDisability=21,GolfroundCategorid=golfRoundCategories.Single(c=>c.Name==“练习-2球最佳球”)。GolfroundCategorid,
TeeOffUTC=DateTime.Parse(“2018-07-22 15:00”),
};
ForEach(s=>context.golfRounds.AddOrUpdate(p=>p.GolfRoundID,s));
SaveChanges();
尝试在.Net Core 2.1中进行种子设定,以及如何获得此值,然后:

GolfCourseID=golfCourse.Single(c=>c.Name==“Bonnie Doon高尔夫俱乐部”).GolfCourseID

GolfRoundCategoryID=golfRoundCategories.Single(c=>c.Name==“练习-2球最佳球”).GolfRoundCategoryID

公共静态void种子(此ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasData(
新高尔夫球场{Name=“Bonnie Doon Golf Club”,Description=“N/A”,Address=“38 Banks Ave”,substration=“Pagewood”,State=“NSW”,Postcode=“2035”,Country=“Australia”,纬度=-33.935189,经度=151.222372},
新高尔夫球场{Name=“贝弗利公园高尔夫俱乐部”,Description=“N/A”,Address=“87 Jubilee Avenue”,subcountry=“贝弗利公园”,State=“NSW”,Postcode=“2217”,Country=“澳大利亚”,纬度=-33.975506,经度=151.131691}
);
modelBuilder.Entity().HasData(
新GolfRoundCategory{Name=“Competition-Stroke”,Description=“N/A”},
新的GolfRoundCategory{Name=“Competition-Stableford”,Description=“N/A”},
新GolfRoundCategory{Name=“Competition-Ambrose”,Description=“N/A”},
新GolfRoundCategory{Name=“Competition-Foresome”,Description=“N/A”},
新GolfRoundCategory{Name=“Practice-2 Ball Best Balls”,Description=“N/A”},
新高尔夫类别{Name=“练习-2球最差球”,Description=“N/A”}
);
modelBuilder.Entity().HasData(
新高尔夫球场
{
Name=“Bonnie Doon GC Practice”,
Notes=“不适用”,
UserID=Guid.Parse(“7dd950ad-d7b0-448a-b689-db3947e31bec”),
GolfCourseID=golfCourse.Single(c=>c.Name==“邦妮•杜恩高尔夫俱乐部”)。GolfCourseID,
每日障碍=21,
GolfRoundCategoryID=golfRoundCategories.Single(c=>c.Name==“练习-2球最佳球”)。GolfRoundCategoryID,
TeeOffUTC=DateTime.Parse(“2018-07-22 15:00”)
},
);
}

在EF中,核心种子数据是迁移不可分割的一部分。就像数据库架构更改一样,种子数据的更改被检测并嵌入到迁移中。因此,没有DbContext可以运行查询或检索数据库引擎自动生成的ID

您需要为自动生成的键列设置显式ID值,以便能够引用这些实体:

var golfCourse1 = new GolfCourse { GolfCourseID = 1, Name = "Bonnie Doon Golf Club", Description = "N/A", Address = "38 Banks Ave", Suburb = "Pagewood", State = "NSW", Postcode = "2035", Country = "Australia", Latitude = -33.935189, Longitude = 151.222372 };

modelBuilder.Entity<GolfCourse>().HasData(
    golfCourse1,
    // ...
);

var golfRoundCategory5 = new GolfRoundCategory { GolfRoundCategoryID = 5, Name = "Practice - 2 Ball Best Balls", Description = "N/A" };

modelBuilder.Entity<GolfRoundCategory>().HasData(
    // ...
    golfRoundCategory5,
    // ...
);

modelBuilder.Entity<GolfRound>().HasData(
    new GolfRound
    {
        Name = "Bonnie Doon GC Practice",
        Notes = "N/A",
        UserID = Guid.Parse("7dd950ad-d7b0-448a-b689-db3947e31bec"),
        GolfCourseID = golfCourse1.GolfCourseID,
        DailyHandicap = 21,
        GolfRoundCategoryID = golfRoundCategory5.GolfRoundCategoryID,
        TeeOffUTC = DateTime.Parse("2018-07-22 15:00")
    },
 );
var golfCourse1=new GolfCourse{GolfCourseID=1,Name=“Bonnie Doon Golf Club”,Description=“N/A”,Address=“38 Banks Ave”,subcountry=“Pagewood”,State=“NSW”,Postcode=“2035”,Country=“Australia”,纬度=-33.935189,经度=151.222372};
modelBuilder.Entity().HasData(
高尔夫球场1,
// ...
);
var golfRoundCategory5=新的GolfRoundCategoryID=5,Name=“练习-2球最佳球”,Description=“N/A”};
modelBuilder.Entity().HasData(
// ...
GOLFROUND类别5,
// ...
);
modelBuilder.Entity().HasData(
新高尔夫球场
{
Name=“Bonnie Doon GC Practice”,
Notes=“不适用”,
UserID=Guid.Parse(“7dd950ad-d7b0-448a-b689-db3947e31bec”),
GolfCourseID=golfCourse1.GolfCourseID,
每日障碍=21,
GolfRoundCategoryID=golfRoundCategory5.GolfRoundCategoryID,
TeeOffUTC=DateTime.Parse(“2018-07-22 15:00”)
},
);

用种子设定替换了类似的内容:)这是一个问题,因为我使用GUID生成ID。我想我可以显式生成GUID。
var golfCourse1 = new GolfCourse { GolfCourseID = 1, Name = "Bonnie Doon Golf Club", Description = "N/A", Address = "38 Banks Ave", Suburb = "Pagewood", State = "NSW", Postcode = "2035", Country = "Australia", Latitude = -33.935189, Longitude = 151.222372 };

modelBuilder.Entity<GolfCourse>().HasData(
    golfCourse1,
    // ...
);

var golfRoundCategory5 = new GolfRoundCategory { GolfRoundCategoryID = 5, Name = "Practice - 2 Ball Best Balls", Description = "N/A" };

modelBuilder.Entity<GolfRoundCategory>().HasData(
    // ...
    golfRoundCategory5,
    // ...
);

modelBuilder.Entity<GolfRound>().HasData(
    new GolfRound
    {
        Name = "Bonnie Doon GC Practice",
        Notes = "N/A",
        UserID = Guid.Parse("7dd950ad-d7b0-448a-b689-db3947e31bec"),
        GolfCourseID = golfCourse1.GolfCourseID,
        DailyHandicap = 21,
        GolfRoundCategoryID = golfRoundCategory5.GolfRoundCategoryID,
        TeeOffUTC = DateTime.Parse("2018-07-22 15:00")
    },
 );