【发布时间】:2025-12-01 15:35:01
【问题描述】:
我正在尝试在我的数据库中使用已定义的 List 植入 OneToMany 关系,我得到以下错误消息
'无法添加实体类型'Country'的种子实体,因为它设置了导航'WineRegions'。要为关系播种,您需要将相关实体种子添加到“WineRegion”并指定外键值 {'CountryId'}。考虑使用 'DbContextOptionsBuilder.EnableSensitiveDataLogging' 来查看所涉及的属性值。'
我使用这个页面来创建我的课程: https://www.learnentityframeworkcore.com/relationships#one-to-many ...我只能猜测我需要手动定义键,即使它应该自动工作...
这是我的两节课。 WineRegions 包含一个 Country 和 Country 包含 WineRegions 的集合:
public class WineRegion
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int WineRegionId { get; set; }
public string WineRegionName { get; set; }
public int CountryId { get; set; }
public Country Country { get; set; }
}
public class Country
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CountryId { get; set; }
[Required]
[MaxLength(255)]
public string CountryName { get; set; }
[Required]
[MaxLength(2)]
public string ISO3166Alpha2 { get; set; }
public ICollection<WineRegion> WineRegions { get; set; }
}
在播种期间,我不想使用硬编码的对象,例如(顺便说一句,此代码有效...):
modelBuilder.Entity<Country>().HasData(
new { Id = 1, Name = "France", ISO3166Alpha2 = "FR" }
);
modelBuilder.Entity<WineRegion>().HasData(
new { Id = 1, Name = "Bordeaux", CountryId = 1 }
);
正如我之前提到的,我想使用在 JSON 解析过程中生成的 List。
所以我就是这样做的:
modelBuilder.Entity<Country>().HasData(listOfCountries); // List<Country>
modelBuilder.Entity<WineRegion>().HasData(listOfWineRegions); //List<WineRegion>
我的 JSON 如下所示:
"wineregions": [
{
"id": 1,
"country": "France",
"iso2": "FR",
"region": [
{
"id": 1,
"name": "Bordeaux"
},
{
"id": 2,
"name": "Burgundy"
},
{
"id": 4,
"name": "Burgundy"
},
{
"id": 5,
"name": "Beaujolais"
},
{
"id": 6,
"name": "Champagne"
},
{
"id": 7,
"name": "Loire"
},
{
"id": 8,
"name": "Alsace"
},
{
"id": 9,
"name": "Rhône"
},
{
"id": 10,
"name": "Provence"
},
{
"id": 11,
"name": "Languedoc-Roussillon"
},
{
"id": 12,
"name": "Jura"
}
]
},
{
"id": 2,
"country": "Italy",
"iso2": "IT",
"region": [
{
"id": 1,
"name": "Piedmont"
},
{
"id": 2,
"name": "Barolo"
},
{
"id": 3,
"name": "Barbaresco"
},
{
"id": 4,
"name": "Tuscany"
},
{
"id": 5,
"name": "Veneto"
},
{
"id": 6,
"name": "Friuli-Venezia"
},
{
"id": 7,
"name": "Giulia"
},
{
"id": 8,
"name": "Abruzzo"
},
{
"id": 9,
"name": "Sicily"
},
{
"id": 10,
"name": "Lambrusco"
}
]
}
]
}
Thanks in advance
【问题讨论】:
-
json无效,开头应该有
{ -
哦,那只是复制粘贴错误。很抱歉!
-
问题解决了吗?
标签: c# asp.net one-to-many seeding ef-core-3.0