그래서 Entity Framework Core에 다음 클래스가 있습니다. 코드를 처음으로 마이그레이션하려고 시도하고 있으며 내 인생에서 유창한 API를 만드는 방법을 알 수 없습니다.복합 키 EF Fluent API 사용시 코어 오류 발생
public class Participants
{
public Activity Activity { get; set; } //Class with Id and Name of Activity
public ApplicationUser Participant { get; set; }
[Key]
[Column(Order = 1)]
public int ActivityId { get; set; }
[Key]
[Column(Order = 2)]
public string ParticipantId { get; set; }
}
EF6에서는 OnModelCreating에서이를 제대로 수행 할 수있었습니다.
modelBuilder.Entity<Attendance>()
.HasRequired(a => a.Activity)
.WithMany()
.WillCascadeOnDelete(false);
그러나 EF 코어의
나는 "복합 기본 키를 설정하려면. 엔티티 유형 '참가자'데이터 주석으로 정의 된 복합 기본 키가 유창 API를 사용합니다."얻을
내가 사용 시도
modelBuilder.Entity<Participants>().HasKey(p => new {p.Activity, p.Participant});
하지만, 단지 사이클 또는 여러 캐스케이드 경로의 원인이 테이블에 FOREIGN KEY 제약 조건 'FK_Participants_AspNetUsers_ParticipantId'참가자 '를 소개
로 연결하는. NO DELETE NO ACTION 또는 UP UP NO NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오.
모든 것을하기위한 더 좋은 방법이있는 경우 제안 사항이 있습니다. 만약 당신이 복수형 구독을 가지고 있다면, 나는 기본적으로 Mosh Hamedani에 의해 EF 코어에서 일하기 위해 "Full Stack Developer가 되려고"노력하고 있습니다. 이 예제는 "13-full-stack-fundamentals"폴더에 있습니다.
UPDATE : 또한
modelBuilder.Entity<Participants>()
.HasOne(p => p.Activity)
.WithMany()
.OnDelete(DeleteBehavior.Cascade);
아직도
을 가지고 노력했다. "엔티티 유형 '참가자'데이터 주석으로 정의 된 복합 기본 키를 설정하려면 복합 기본 키, 유창 API를 사용하고 있습니다."
UPDATE 2 : 로이의 제안을하려고하면이 내가 사이클 또는 여러 개의 계단식 경로를 일으킬 수 테이블 '참가자'에 FOREIGN KEY 제약 조건 'FK_Participants_AspNetUsers_ParticipantId'를 소개
납니다 것입니다. NO DELETE NO ACTION 또는 UP UP NO NO ACTION을 지정하거나 다른 FOREIGN KEY 제약 조건을 수정하십시오.
UPDATE 3 : 나는 OneDelete 중 하나를 제거 마이그레이션
에서 : ReferntialAction.Cascade 그것은했다. FK_Participants_AspNetUsers_ParticipantId 중 하나를 제거했습니다.
나는 또한 나의 OnModelCreating
modelBuilder.Entity<Participants>()
.HasKey(p => new { p.ActivityId, p.ParticipantId });
base.OnModelCreating(modelBuilder);
//Added this (Not sure if it's needed if anyone knows let me know)
modelBuilder.Entity<Participants>()
.HasOne(p => p.Activity)
.WithMany()
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity() .HasRequired (a => a.Activity) .WithMany() .WillCascadeOnDelete (false); ? –
DevilSuichiro
내가 시도한 다른 것을 보여주기 위해 업데이트되었습니다. – vgwizardx
'활동'유형을 공유 할 수 있습니까? 순환 경로를 도입하지 않는다고 확신합니까? 이 경우 마이그레이션에서 아무 것도 제거하지 않아도됩니다. – Smit