迁移导致“Sequence contains no elements”错误

10

我使用表格继承创建了一个包含3个类的模型,并且使用了自引用层次表的2个外键。

我有一个名为BaseProperty的类,它具有自引用键CloneID和导航属性Clone

public class BaseProperty
{
   public int ID {get; set; }

   public int? CloneID {get; set; }

   public BaseProperty Clone {get; set; }

   //If I add this code, when I use Add-Migration - 
   //Sequence contains no elements error
   //public int? TriggeredCloneID {get; set;}
}

我有一个继承自BaseProperty类的Property类,它有一个外键BlockID和一个导航属性Block

public class Property : BaseProperty
{
   public int? BlockID { get; set; }

   public Block { get; set; }
}

我有一个继承了BaseProperty并具有Properties导航属性的Block类:

public class Block: BaseProperty
{  
   public ICollection<Property> Properties { get; set; }

   [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
   public int? ComputedNumberOfProperties { get; set; }
}
请注意,Property类中的Block属性也是自引用的,因为PropertyBlock都继承了BaseProperty且我在使用表层次结构继承。它已经在生产系统中运行并拥有实时数据。现在,我想向基类添加一个字段(只是一个标准的int?属性),但当我添加迁移时我会收到“序列不包含任何元素”的错误。
我在https://entityframework.codeplex.com/workitem/569发现了这个未解决的问题,所以我尝试了描述的解决方法并删除了自引用键和导航属性,但是该迁移失败并显示相同的错误。现在我好像完全陷入了困境...

1
你能发布导致错误的代码吗? - mr100
如果您根本没有添加任何属性,只是尝试创建一个新的空迁移,那么是否按预期工作? - Chris Curtis
@ChrisCurtis 是的,迁移对其他类的更改正常工作。经过多次尝试和错误,我实际上已经成功让它工作了。Block 类中还有一个数据库计算字段。删除它(以及自引用属性)让我可以运行迁移。我打算进行一些实验来解决这个问题,并提供复制问题的代码。然后我会在这里发布它。 - Colin
1
嗨,@Colin,你可以发布自己问题的答案以供将来参考。 - Rob Tillie
2个回答

1
在Block类中还有一个计算字段的数据库。删除它(以及自引用属性)让我可以运行迁移。

0

我也遇到了这个问题,我试图将一个类型从ComicImage更改为ComicMediaFile... 我没有注意修改变量名称,所以最终出现了这种情况

List<ComicMediaFile> ComicImages; // and after I changed this variable name to ComicMediaFiles... it worked... I don't know why.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接