【问题标题】:"Sequence contains no elements" error during database seed数据库种子期间出现“序列不包含元素”错误
【发布时间】:2014-11-20 13:11:59
【问题描述】:

当我在我的 Seed 方法中运行以下代码时,包管理器控制台不断抛出“序列不包含元素”错误。

context.Countries.AddOrUpdate(c => c.Name,
    new Country { IsInUse = true, Name = "Botswana", Alpha2 = "BW", Alpha3 = "BWA" },
    new Country { IsInUse = true, Name = "Lesotho", Alpha2 = "LS", Alpha3 = "LSO" },
    new Country { IsInUse = true, Name = "Mozambique", Alpha2 = "MZ", Alpha3 = "MOZ" },
    new Country { IsInUse = true, Name = "South Africa", Alpha2 = "ZA", Alpha3 = "ZAF" },
    new Country { IsInUse = true, Name = "Swaziland", Alpha2 = "SZ", Alpha3 = "SWZ" },
    new Country { IsInUse = true, Name = "Zimbabwe", Alpha2 = "ZW", Alpha3 = "ZWE" }
);
Country za = context.Countries.Where(x => x.Name == "South Africa").First();

我需要获取南非国家对象来执行其余步骤(未显示)。

如果我使用 FirstOrDefault 或 SingleOrDefault 系统会返回 null,这会中断其余步骤。

为什么当我明确添加数据时,我的上下文返回 null。

我尝试了 SaveChanges,但这会导致其他错误。

谢谢

【问题讨论】:

  • 不是答案,但您可以重写 context.Countries.Where(x => x.Name == "South Africa").First(); as context.Countries.Single(x => x.Name == "南非");
  • 您在 SaveChanges() 上遇到什么错误?此外,您可以使用 context.Countries.Local.Where(... 查询您的本地实体
  • @UrbanEsc,我得到“一个或多个实体的验证失败。有关更多详细信息,请参阅 'EntityValidationErrors' 属性。”...在更深入的调查中,这使我找到了 MaxLenth(2)应该是 MaxLength(3)。谢谢。

标签: c# entity-framework-6


【解决方案1】:

您需要调用 SaveChanges() 将更改应用到数据库。在你这样做之前,实际上什么都没有写。

context.SaveChanges();
Country za = context.Countries.Where(x => x.Name == "South Africa").First();

如果 SaveChanges() 抛出错误,那么这就是你真正的问题,你应该发布它。

【讨论】:

  • 您可能想补充一点,可以使用 context.Countries.Local.Where(... 查询本地实体
  • 他可以。但这是Seed 方法。这并不能真正解决他的问题。
  • @UrbanEsc 关于 savechanges 错误的评论引导我进行调查并找出真正的错误。
猜你喜欢
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多