实体框架种子功能并未将所有数据插入数据库
-
25-10-2019 - |
题
我有一个从dropcreatepatabaseifmodelchanges继承的类。
public class SetupData : DropCreateDatabaseIfModelChanges<CyclingClubContext>
{
protected override void Seed(CyclingClubContext context)
{
var _CycleType = new List<CycleType>
{
new CycleType { Type = "Leisure Cycle Type A" },
new CycleType { Type = "Mountain Bike Type A" },
new CycleType { Type = "Racer" },
new CycleType { Type = "Leisure Cycle Type B" },
new CycleType { Type = "Mountain Bike Type B" }
};
new List<CycleModel>
{
new CycleModel{ Model = "Challenge 26in", CycleType = _CycleType.Single(r => r.Type == "Racer") },
new CycleModel{ Model = "Challenge 27in", CycleType = _CycleType.Single(r => r.Type == "Racer") },
new CycleModel{ Model = "Muddy Fox Vortex", CycleType = _CycleType.Single(r => r.Type == "Leisure Cycle Type A") },
new CycleModel{ Model = "Laser 8", CycleType = _CycleType.Single(r => r.Type == "Leisure Cycle Type B") },
new CycleModel{ Model = "Silverfox 26in", CycleType = _CycleType.Single(r => r.Type == "Mountain Bike Type B") }
}.ForEach(IndividualRow => context.CycleModel.Add(IndividualRow));
}
}
我参加这堂课后,我发现...
创建了两个表。
1)周期模型(所有行正确插入)。
2)循环类型(剩下的一排要插入)[问题]。
山地自行车A型不会插入台式型环。
我认为,我需要修改代码,但我不知道该怎么做。
我不想在下面插入另一行,以便可以解决我的问题。
new CycleModel{ Model = "Testing...", CycleType = _CycleType.Single(r => r.Type == "Mountain Bike Type A") }
请让我得到建议。
解决方案
种子()方法应以 context.SaveChanges()
.
就目前而言,这完全是奇怪的。
但是很明显,任何CycleModel都没有引用“山地自行车A”,这就是为什么它被排除在外。
您可能可以通过
_CycleType.ForEach(IndividualRow => context.CycleType.Add(IndividualRow));
其他提示
你只是添加 CycleModel
S上下文。当您添加一个 CycleModel
EF将添加所有相关实体 CycleModel
实例继续引用。这里清单 CycleModel
在上下文中添加的s与 CycleType
“山地自行车A型”。因此没有添加。
您可以添加所有 CycleType
首先。
var _CycleType = new List<CycleType>
{
new CycleType { Type = "Leisure Cycle Type A" },
new CycleType { Type = "Mountain Bike Type A" },
new CycleType { Type = "Racer" },
new CycleType { Type = "Leisure Cycle Type B" },
new CycleType { Type = "Mountain Bike Type B" }
}.ForEach(c => context.CycleType.Add(c));
或者,您可以单独添加该实例。
context.CycleType.Add(_CycleType.Single(r => r.Type == "Mountain Bike Type A"));
不隶属于 StackOverflow