Entity Framework Core 无法创建带有子对象和 GUID 的种子

Gil*_*ian 4 entity-framework-core .net-core

假设我有以下实体:

 public class Artist
 {
     [Key]
     public Guid Id { get; set; }

     [Required]
     public string Name { get; set; }
 }

public class Song
{
    [Key] 
    public Guid Id { get; set; }

    [Required] 
    public string Name { get; set; }

    [Required]  
    public Artist Artist { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

对于Song课程,我正在尝试创建一个种子,例如:

modelBuilder.Entity<Song>().HasData(new Song
    {
        Id = Guid.NewGuid(),
        Name = "test",
        Artist = new Artist
        {
            Id = Guid.NewGuid(),
            Name = "test"
        }
    });
Run Code Online (Sandbox Code Playgroud)

这引发了以下错误:

无法添加实体类型“歌曲”的种子实体,因为没有为所需的属性“ArtistId”提供值。

我不知道为什么我不断收到此错误。当我尝试Artist只为对象做种时,我没有问题。我还尝试引用现有Artist对象,但结果相同。

编辑:我忘了提到代码确实可以运行,但是当尝试通过Add-Migration InitialCreate命令创建迁移时,错误显示。

Gil*_*ian 6

我找到了一个使用匿名对象 ( new {})的解决方案。问题是我的Song对象不包含Guid ArtistId属性,而是一个Artist Artist属性。但是由于某种原因,EF 迁移无法与此对象相关联,而是需要一个 id。使用匿名对象,这可以像这样修复:

modelBuilder.Entity<Song>().HasData(new //No Song object here.
{
    Id = Guid.NewGuid(),
    Name = "test",
    ArtistId = artist.Id
});
Run Code Online (Sandbox Code Playgroud)

现在我可以运行我的迁移了。

更新: 我认为现在插入种子数据的更简单方法是生成空迁移并通过该migrationBuilder.Sql()方法添加数据。