2
EFコアプロジェクトを使用してASP.NETコア1.1をASP.NETコア2.0にアップグレードしています。エンティティタイプでは、EFコア2.0でプライマリキーを定義する必要があります
私が前に働いていた次のエンティティと構成があります。
public class Ebook {
public Int32 Id { get; set; }
public String Title { get; set; }
public virtual ICollection<EbookFile> EbookFiles { get; set; } = new List<EbookFile>();
}
public class EbookFile {
public Int32 EbookId { get; set; }
public Int32 FileId { get; set; }
public virtual Ebook Ebook { get; set; }
public virtual File File { get; set; }
}
public class File {
public Int32 Id { get; set; }
public Byte[] Content { get; set; }
public virtual ICollection<EbookFile> EbookFiles { get; set; } = new List<EbookFile>();
}
をと構成は以下のとおりです。
public DbSet<Ebook> Ebooks { get; set; }
public DbSet<EbookFile> EbookFiles { get; set; }
public DbSet<File> Files { get; set; }
:
builder.Entity<Ebook>(b => {
b.ToTable("Ebooks");
b.HasKey(x => x.Id);
b.Property(x => x.Id).ValueGeneratedOnAddOrUpdate().UseSqlServerIdentityColumn();
b.Property(x => x.Title).IsRequired(true).HasMaxLength(200);
b.HasIndex(x => x.Title).IsUnique();
});
builder.Entity<EbookFile>(b => {
b.ToTable("EbookFiles");
b.HasKey(x => new { x.EbookId, x.FileId });
b.HasOne(x => x.Ebook).WithMany(x => x.EbookFiles).HasForeignKey(x => x.EbookId).IsRequired(true).OnDelete(DeleteBehavior.Cascade);
b.HasOne(x => x.File).WithMany(x => x.EbookFiles).HasForeignKey(x => x.FileId).IsRequired(true).OnDelete(DeleteBehavior.Cascade);
});
builder.Entity<File>(b => {
b.ToTable("Files");
b.HasKey(x => x.Id);
b.Property(x => x.Id).UseSqlServerIdentityColumn();
b.Property(x => x.Content).IsRequired(false);
});
そして、私のContextクラスの
私は性質を持っています私はそれを実行するとエラーが表示されます:
The entity type 'EbookFile' requires a primary key to be defined.
ここでは何が欠けていますか? EF Core 2.0で何か変わったのですか?
一人ではできないように複合主キーはまだ、私のプロジェクトで問題なく動作それでは。 –
'.ValueGeneratedOnAddOrUpdate()'を削除してください。エンティティがストアに追加された後にキー値を変更することができないため、「* Idプロパティ」を「ValueGeneratedOnUpdate」または「ValueGeneratedOnAddOrUpdate」として設定することはできません。* –
@Stoev削除しました。同じエラーが発生し続ける... –