我使用表格继承创建了一个包含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
属性也是自引用的,因为Property
和Block
都继承了BaseProperty
且我在使用表层次结构继承。它已经在生产系统中运行并拥有实时数据。现在,我想向基类添加一个字段(只是一个标准的int?
属性),但当我添加迁移时我会收到“序列不包含任何元素”的错误。我在https://entityframework.codeplex.com/workitem/569发现了这个未解决的问题,所以我尝试了描述的解决方法并删除了自引用键和导航属性,但是该迁移失败并显示相同的错误。现在我好像完全陷入了困境...
Block
类中还有一个数据库计算字段。删除它(以及自引用属性)让我可以运行迁移。我打算进行一些实验来解决这个问题,并提供复制问题的代码。然后我会在这里发布它。 - Colin