엔터티가 이미 정의 된 키 필드를 만드는 이유는 무엇입니까?
Aug 20 2020
예외 SqlException : Invalid column name 'ChecklistTemplate_Id'를 트리거하는 여러 관련 도메인 모델이 있습니다 .
내 도메인 모델은 다음과 같습니다.
public class Assignment
{
public long Id { get; set; }
public long ChecklistId { get; set; }
public DateTime InspectionDate { get; set; }
public long JobId { get; set; }
public Guid? EmployeeId { get; set; }
// TODO: Make the completion a nullable date time in the database and here
public DateTime CompletionDate { get; set; }
public virtual Job Job { get; set; }
public virtual Checklist Checklist { get; set; }
public virtual IList<Image> Images { get; set; }
public virtual IList<Attachment> Attachments { get; set; }
public virtual IList<Equipment> Equipments { get; set; }
}
내 EntityTypeConfiguration 클래스는 다음과 같습니다.
internal class AssignmentConfiguration : EntityTypeConfiguration<Assignment>
{
public AssignmentConfiguration()
{
ToTable("Assignment");
HasKey(k => k.Id);
Property(a => a.ChecklistId)
.IsRequired();
Property(a => a.CompletionDate)
.IsOptional();
Property(a => a.EmployeeId)
.IsOptional();
Property(a => a.Id)
.IsRequired();
Property(a => a.InspectionDate)
.IsRequired();
Property(a => a.JobId)
.IsRequired();
HasRequired(a => a.Job)
.WithMany(a => a.Assignments)
.HasForeignKey(a => a.JobId);
HasRequired(a => a.Checklist)
.WithOptional(a => a.Assignment);
HasMany(a => a.Images)
.WithRequired(a => a.Assignment)
.HasForeignKey(a => a.InspectionId);
}
}
Checklist 도메인 모델에는 조인이있는 ChecklistTemplate 탐색 속성이 있습니다.
HasMany(a => a.CheckLists)
.WithRequired(a => a.ChecklistTemplate)
.HasForeignKey(a => a.ChecklistTemplateId);
할당 엔터티 구성에서 볼 수 있듯이 할당과 체크리스트 사이에는 일대일이 있습니다.
그리고 예, DBContext에 구성을 포함하고 있습니다.
또한 다른 기본 키가 정의되어 있고 적용되지 않는 것처럼 보이지만 Entity Framework 6이 Id 열을 생성하는 것을 살펴 보았습니다 .
답변
Noname Aug 20 2020 at 03:23
나는 그것에 대한 만족스러운 대답을 가지고 있지 않지만 ef6에 많은 문제가있었습니다. 정의되지 않았거나 잘못 정의 된 탐색이 있기 때문입니다. 따라서 ef6는 프록시 클래스에서 즉석에서 생성하고 몇 시간 동안 울습니다. 곧 문제를 발견하시기 바랍니다.
그리고 당신이 말한 내비게이션은 일대 다입니다. 조심해.