运行EF 4.x DbContext Fluent生成器时出错

时间:2012-08-14 13:58:08

标签: .net entity-framework entity-framework-4 ef-code-first

在尝试生成基于代码的实体和映射时,我的模型上出现以下错误。这是错误:

Error 1  Running transformation: System.InvalidOperationException: Sequence contains no elements
   at System.Linq.Enumerable.Single[TSource](IEnumerable`1 source)
   at Microsoft.VisualStudio.TextTemplating5FBD4EDD9EACD746112871E64F81C5D3.GeneratedTextTransformation.TransformText()
   at Microsoft.VisualStudio.TextTemplating.TransformationRunner.RunTransformation(TemplateProcessingSession session, String source, ITextTemplatingEngineHost host, String& result)
1 1  

我认为我的模型中没有预期的东西。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

发生错误是因为模板中的LINQ查询使用.Single(),当查询没有返回结果时会抛出异常。如果将.Single()切换为.SingleOrDefault(),则不会抛出异常。

该模板包含对.Single()的多次调用,但通过反复试验,我发现罪魁祸首.Single()(在我的情况下)位于第124行:

NavigationProperty navPropertyBackReference = navProperty.ToEndMember.GetEntityType().NavigationProperties
    .Where(npBack => npBack.RelationshipType == navProperty.RelationshipType && npBack != navProperty)
    .SingleOrDefault();

你的罪魁祸首.Single()可能会有所不同。我根本不理解这种模板语言,所以我不知道允许代码继续使用空序列的后果是什么。它可能只会导致您的输出丢失一些您必须手动修复的数据,但至少这种方式不会发生异常并且您获得了所有文件。

你可以用.SingleOrDefault()替换所有.Single()s而不会发生意外,但为了安全起见,我只替换了导致我异常的那个。