gpt4 book ai didi

.net-core - Entity Framework Core 无法使用子对象和 GUID 创建种子

转载 作者:行者123 更新时间:2023-12-02 23:25:23 32 4
gpt4 key购买 nike

假设我有以下实体:

 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; }
}

对于 Song 类,我尝试创建一个种子,例如:

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

这会引发以下错误:

The seed entity for entity type 'Song' cannot be added because there was no value provided for the required property 'ArtistId'.

我不知道为什么我总是收到此错误。当我尝试仅为 Artist 对象播种时,没有任何问题。我还尝试引用现有的 Artist 对象,但结果相同。

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

最佳答案

我找到了使用匿名对象的解决方案 (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
});

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

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

关于.net-core - Entity Framework Core 无法使用子对象和 GUID 创建种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51698071/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com