2017-10-09 4 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); 
}); 

그리고 내 상황에 맞는 클래스에

나는 특성을 가지고

실행할 때 오류가 발생합니다.

The entity type 'EbookFile' requires a primary key to be defined. 

무엇이 여기에 있습니까? EF Core 2.0에서 변화가 있습니까?

+0

복합 기본 키는 여전히 내 프로젝트에서 잘 작동되는 것이므로 혼자는 할 수 없습니다 그것. –

+1

'.ValueGeneratedOnAddOrUpdate()'를 제거하십시오. 마이그레이션을 생성하려고 시도하면 엔티티가 상점에 추가 된 후에 키 값을 변경할 수 없기 때문에 "Value '속성'Id '를'ValueGeneratedOnUpdate '또는'ValueGeneratedOnAddOrUpdate '로 구성 할 수 없습니다. * –

+0

@Stoev 제거한 것과 나는 같은 오류가 계속 발생합니다 ... –

답변