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命令创建迁移时,错误显示。
我找到了一个使用匿名对象 ( 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()方法添加数据。
| 归档时间: |
|
| 查看次数: |
2831 次 |
| 最近记录: |