Я пытался создать составной ключ в ядре EF, используя следующую строку:
modelBuilder.Entity<PackageMaster>()
.HasAlternateKey(a => new { a.InstituteId, a.CourseId, a.PackageCode, a.PackageName });
, где комбинация InstituteId, CourseId, PackageCode, PackageName должна быть уникальной.Это работало нормально, но когда я обновляю запись, скажем, обновление packageCode, то я получаю ошибку ниже,
Свойство PackageCode для типа сущности PackageMaster является частью ключа и поэтому не может бытьизменен или помечен как измененный.Чтобы изменить принципал существующего объекта с идентифицирующим внешним ключом, сначала удалите зависимого и вызовите «SaveChanges», а затем свяжите зависимого с новым принципалом.
Я подумал, что это проблема с методом »HasAlternateKey ", поэтому я обновил его до
modelBuilder.Entity<PackageMaster>()
.HasIndex(a => new { a.InstituteId, a.CourseId, a.PackageCode, a.PackageName })
.IsUnique();
, а вот класс сущностей
[Table(Schema.Institute + "." + nameof(PackageMaster))]
public class PackageMaster
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int PackageId { get; set; }
[Required]
[StringLength(5)]
public string PackageCode { get; set; }
[Required]
[StringLength(50)]
public string PackageName { get; set; }
[StringLength(500)]
public string Description { get; set; }
public int InstituteId { get; set; }
public int CourseId { get; set; }
[ForeignKey("CourseId")]
public CourseMaster CourseMaster { get; set; }
[Required]
public decimal Cost { get; set; }
[StringLength(3)]
public string CurrencyCode { get; set; }
public bool GSTIncluded { get; set; }
}
, но все равно не повезло.Любая помощь будет высоко ценится