複合キーで再帰関係を定義する必要がありました。多くの試行錯誤の後、私はこれに行き着きました:
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; }
}
Add-Migration を試みている間、「シーケンスには要素が含まれていません」という同じエラーが常に発生していました。この定義が正しいと「ほぼ」確信していたので、移行せずに新しいデータベースを再作成しました。完全に問題ありませんでした。Db にはまったく問題はありませんでした。したがって、そこには EF 6 が気に入らない「何か」があります。「呼び出しのターゲットによって例外がスローされました」というスキーマを取得しようとすると、EFパワーツールが爆撃するため、確認がありました。
そこから再起動すればマイグレーションがどうなるか見ていきますが、このDbではもう使えないのではないかと心配です。私はこのツールがとても好きなので、これが修正されることを願っています.