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에서 변화가 있습니까?
복합 기본 키는 여전히 내 프로젝트에서 잘 작동되는 것이므로 혼자는 할 수 없습니다 그것. –
'.ValueGeneratedOnAddOrUpdate()'를 제거하십시오. 마이그레이션을 생성하려고 시도하면 엔티티가 상점에 추가 된 후에 키 값을 변경할 수 없기 때문에 "Value '속성'Id '를'ValueGeneratedOnUpdate '또는'ValueGeneratedOnAddOrUpdate '로 구성 할 수 없습니다. * –
@Stoev 제거한 것과 나는 같은 오류가 계속 발생합니다 ... –