2017-10-09 21 views
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で何か変わったのですか?

+0

一人ではできないように複合主キーはまだ、私のプロジェクトで問題なく動作それでは。 –

+1

'.ValueGeneratedOnAddOrUpdate()'を削除してください。エンティティがストアに追加された後にキー値を変更することができないため、「* Idプロパティ」を「ValueGeneratedOnUpdate」または「ValueGeneratedOnAddOrUpdate」として設定することはできません。* –

+0

@Stoev削除しました。同じエラーが発生し続ける... –

答えて

0

アイヴァンの答えを加えれば、アイデンティティの列にValueGeneratedOnAddOrUpdateは必要ないとわかると思います。

あなたは足場を使用してコードを生成することができ、私の場合、私はあなたがこのリンクでそれを確認することができCatFactoryを使用します。https://www.codeproject.com/Articles/1160615/Generating-Code-for-EF-Core-with-CatFactory

よろしく

関連する問題