C# 代码可以编译,但DbContext.SaveChanges()最终尝试强制转换[…]Generic.List`1[x]';输入';x';

C# 代码可以编译,但DbContext.SaveChanges()最终尝试强制转换[…]Generic.List`1[x]';输入';x';,c#,asp.net-mvc-3,entity-framework,entity-framework-4.3.1,C#,Asp.net Mvc 3,Entity Framework,Entity Framework 4.3.1,我刚刚完成了对一些代码的重分解,现在在保存DbContext时出现了这个错误,因为后面的一些计算代码不应该受到我刚才所做更改的影响 错误是: {”无法强制转换类型为的对象 'System.Collections.Generic.List'1[\u 3T.NewDomain.Quote.Pricing.PriceLineItem]' 键入“\u 3T.NewDomain.Quote.Pricing.PriceLineItem”。” 调用时会触发它:DbContext.SaveChanges() 我

我刚刚完成了对一些代码的重分解,现在在保存
DbContext
时出现了这个错误,因为后面的一些计算代码不应该受到我刚才所做更改的影响

错误是:

{”无法强制转换类型为的对象 'System.Collections.Generic.List'1[\u 3T.NewDomain.Quote.Pricing.PriceLineItem]' 键入“\u 3T.NewDomain.Quote.Pricing.PriceLineItem”。”

调用时会触发它:
DbContext.SaveChanges()

我将开始一个相当长的调试过程。但是,我完全搞不懂代码是如何编译的。然而,
DbContext
试图将列表分配给单个实例变量

有没有人遇到过会导致这样的事情?
我忽略了什么?我找到了答案。我把它贴在这里,以防对别人有帮助

考虑到错误与EF有关,并且代码已编译,我首先假设这很可能是一个配置错误

提供一些附加信息:位于错误焦点的
PriceLineItem
类可以嵌套在自身中,提供树结构。还有一些类继承自
PriceLineItem
,例如
IssuePriceLineItem

早在我开始使用这种新的树结构时,我就使用fluent API在我的
DbContext
类中手动定义了以下配置:

 modelBuilder.Entity<IssuePriceLineItem>()
   .HasOptional(p => p.PriceLineItems)
   .WithMany()
   .HasForeignKey(c => c.ParentLineItemId);

但是,最好的解决办法(IMO)是完全删除此条目。由于使用了属性名称,配置之上的约定充分考虑了此关系定义

感谢@Ric的建议。我想不出什么样的代码适合显示。真的,我是在找一个“根据目前的证据,开始看这里”。后来我明白了这一点,现在(事后来看)我知道EF fluent配置代码应该是可以分享的相关代码片段。
 modelBuilder.Entity<IssuePriceLineItem>()
   .HasOptional(p => p.ParentLineItem)
   .WithMany() /* implies ICollection<PriceLineItem> PriceLineItems */
   .HasForeignKey(c => c.ParentLineItemId);
 modelBuilder.Entity<IssuePriceLineItem>()
   .HasMany(p => p.PriceLineItems)
   .WithOptional() /* implies ParentLineItem navigation property */
   .HasForeignKey(c => c.ParentLineItemId);
  modelBuilder.Entity<PriceLineItem>()
    .HasOptional(p => p.ParentLineItem)
    .WithMany(p => p.PriceLineItems)
    .HasForeignKey(c => c.ParentLineItemId);