【问题标题】:entity framework seed function did not Insert all the data to database实体框架种子功能没有将所有数据插入数据库
【发布时间】:2012-01-10 10:38:38
【问题描述】:

我有一个继承自 DropCreateDatabaseIfModelChanges 的类。

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 未插入到表 CycleType。
我想,我需要修改我的代码,但我不知道该怎么做。

我不想像下面这样插入另一行来解决我的问题。

new CycleModel{ Model = "Testing...", CycleType =  _CycleType.Single(r => r.Type == "Mountain Bike Type A") }

请给我建议。

【问题讨论】:

    标签: c# entity-framework-4 entity-framework-4.1 ef-code-first


    【解决方案1】:

    Seed() 方法应以 context.SaveChanges() 结尾。

    就目前而言,奇怪的是什么都被保存了。

    但很明显,任何 CycleModel 都没有引用“Mountain Bike Type A”,这就是它被遗漏的原因。

    你可以用

    修复它
     _CycleType.ForEach(IndividualRow => context.CycleType.Add(IndividualRow));
    

    【讨论】:

      【解决方案2】:

      您只是将CycleModels 添加到上下文中。当您添加 CycleModel 时,EF 将添加 CycleModel 实例保持引用的所有相关实体。这里添加到上下文中的CycleModels 列表与CycleType“Mountain Bike Type A”没有任何关系。因此没有添加。

      您可以先添加所有CycleTypes。

          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"));
      

      【讨论】:

      • 感谢@Eranga 的有用建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      • 2016-03-21
      • 1970-01-01
      • 2014-06-12
      相关资源
      最近更新 更多