我必须在复合键上定义递归关系。经过多次尝试,我最终得到了这个:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Category>()
.Property(t => t.WhichAmazon).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<Category>()
.Property(t => t.IdCategory).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
modelBuilder.Entity<Category>()
.HasKey(c => new {c.WhichAmazon, c.IdCategory})
.HasOptional(p => p.Children)
.WithMany()
.HasForeignKey(c => new { c.WhichChildrenAmazon, c.ChildrenId });
}
对于这张桌子
public class Category
{
// Keys and relationships defined in BooksDataLayer
[MaxLength(2)]
public string WhichAmazon { get; set; }
public int IdCategory { get; set; }
public string Name { get; set; }
[Timestamp]
public Byte[] TimeStamp { get; set; }
public DateTime LastCheck { get; set; }
public virtual List<Book> Books { get; set; }
public string WhichChildrenAmazon { get; set; }
public int? ChildrenId { get; set; }
public virtual List<Category> Children { get; set; }
}
在尝试添加迁移时,我经常遇到同样的错误:“序列不包含任何元素”。因为我“几乎”确定这个定义是正确的,所以我继续重新创建了一个新的数据库,没有迁移。完全没问题,数据库完全没有问题。所以那里有 EF 6 不喜欢的“东西”。我得到了确认,因为如果我尝试获取模式“调用的目标已抛出异常”,EF 电动工具就会爆炸。
如果我从那里重新开始,我会看看迁移现在会发生什么,但我担心不能再使用这个 Db。我非常喜欢这个工具,所以我希望可以解决这个问题。