Mengapa Entitas membuat bidang kunci jika sudah ditentukan?
Saya memiliki beberapa model domain terkait yang memicu pengecualian SqlException: Nama kolom 'ChecklistTemplate_Id' tidak valid .
Model domain saya terlihat seperti:
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; }
}
Kelas EntityTypeConfiguration saya terlihat seperti ini:
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);
}
}
Model domain Daftar Periksa memiliki properti navigasi ChecklistTemplate dengan gabungan:
HasMany(a => a.CheckLists)
.WithRequired(a => a.ChecklistTemplate)
.HasForeignKey(a => a.ChecklistTemplateId);
Ada satu lawan satu antara Tugas dan Daftar Periksa seperti yang terlihat di konfigurasi entitas Tugas.
Dan ya, kami menyertakan konfigurasi di DBContext.
Juga, saya melihat Entity Framework 6 membuat kolom Id meskipun kunci utama lainnya ditentukan dan sepertinya tidak berlaku.
Jawaban
Saya tidak memiliki jawaban yang memuaskan untuk itu tetapi saya mengalami banyak masalah dengan ef6. Ini karena ada navigasi yang tidak ditentukan atau salah didefinisikan. Jadi ef6 membuatnya dengan cepat di kelas proxy dan Anda menangis berjam-jam. Saya harap Anda segera menemukan masalahnya.
Dan navigasi yang Anda nyatakan adalah one-to-many. Hati-Hati.