首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在EF Core 2.1中播种

如何在EF Core 2.1中播种
EN

Stack Overflow用户
提问于 2018-08-22 10:11:58
回答 1查看 61关注 0票数 0

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

代码语言:javascript
运行
复制
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();

尝试在.Net Core2.1中执行种子播种,再加上如何获得该值,然后:

GolfCourseID = golfCourse.Single(c => c.Name == "Bonnie Doon Golf Club").GolfCourseID

GolfRoundCategoryID = golfRoundCategories.Single(c => c.Name == "Practice -2 Ball最佳球“).GolfRoundCategoryID

?!

代码语言:javascript
运行
复制
public static void Seed(this ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<GolfCourse>().HasData(
            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 }

        );
        modelBuilder.Entity<GolfRoundCategory>().HasData(
            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" }
        );

        modelBuilder.Entity<GolfRound>().HasData(
            new GolfRound
            {
                Name = "Bonnie Doon GC Practice",
                Notes = "N/A",
                UserID = Guid.Parse("7dd950ad-d7b0-448a-b689-db3947e31bec"),
                GolfCourseID = golfCourse.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")
            },
        );

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-22 22:44:47

在EF中,核心种子数据是迁移的一个组成部分。就像DB模式的变化一样,种子数据的变化被检测到并嵌入到迁移中。既然如此,就没有DbContext可以运行查询或检索由DB引擎自动生成的ID。

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

代码语言:javascript
运行
复制
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")
    },
 );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51964580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档