TryUpdateModel Error

2019-09-08 03:04发布

问题:

First time I can add Allergies into my DB without a problem is As below screen.

But when I try to add 2nd record (after save the first record) then it gives below mentioned run time exception (is as below screen).

Run time Exception

An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details.

Stack Trace (this is for when I try to add 2nd record for medical table.But it is same for Allergies Table also)

Violation of PRIMARY KEY constraint 'PK__Medicati__3214EC0768A0EA12'. Cannot insert duplicate key in object 'dbo.Medications'. The statement has been terminated.

Action Method

[HttpPost]
public ActionResult EditMedicalInfo(string providerKey, string ownerKey, string petKey)
{
    var pet = Repository.GetPet(ownerKey, petKey);
    if (TryUpdateModel(pet))
    {
        Repository.Save();
    }
    var url = Url.AbsoluteRouteUrl("PetDetail", new { controller = "customers", action = "detail", providerKey = providerKey, ownerKey = ownerKey, petKey = petKey }) + "#medical";
    return Redirect(url);
}

Pet Model

public class Pet {
        public Pet() { Id = Guid.NewGuid(); Created = DateTime.Now; }

        public Guid Id { get; set; }
        public virtual Owner Owner { get; set; }

        [StringLength(50), Required]
        public string Name { get; set; }
        public string Key { get; set; }
        public DateTime Created { get; set; }
        [Display(Name = "Birth Date"), DataType(DataType.Date)]
        public DateTime? BirthDate { get; set; }
        [EnumDataType(typeof(PetType)), UIHint("EnumerationList")]
        [Required]
        public int Type { get; set; }
        [Required]
        public Guid BreedId { get; set; }
        [Display(Name = "Breed"), ForeignKey("BreedId")]
        public virtual Breed Breed { get; set; }
        [EnumDataType(typeof(Gender)), UIHint("EnumerationList")]
        [Required]
        public int? Gender { get; set; }

        public double Weight { get; set; }

        [Display(Name = "License #")]
        public string LicenseNumber { get; set; }
        [Display(Name = "Microchip #")]
        public string MicrochipNumber { get; set; }

        public int? AgeValue { get { return (BirthDate.HasValue) ? (int)(DateTime.Today - BirthDate.Value).TotalDays : default(int?); } }
        public string Age { get { return (BirthDate.HasValue) ? BirthDate.Value.ToAge() : "Unknown"; } }

        public virtual ICollection<PetPhoto> Photos { get; set; }
        public virtual ICollection<Appointment> Appointments { get; set; }
        public virtual ICollection<MedicalRecordOrder> Orders { get; set; }
        public virtual ICollection<PetDocument> Documents { get; set; }
        public virtual ICollection<PetNote> Notes { get; set; }
        public virtual ICollection<PetProvider> Providers { get; set; }
        public virtual ICollection<PetService> PetServices { get; set; }
        public Guid? Avatar { get; set; }
        public virtual MedicalRecord Medical { get; set; }
        public virtual BehavioralRecord Behavioral { get; set; }
        public virtual DietRecord Diet { get; set; }
        public Guid? EmergencyVeterinarianId { get; set; }
        [ForeignKey("EmergencyVeterinarianId")]
        public virtual Provider EmergencyVeterinarian { get; set; }
        public virtual ICollection<PetContact> Contacts { get; set; }
        [EnumDataType(typeof(ProfileCreatorType))]
        public int ProfileCreator { get; set; }

        [EnumDataType(typeof(PetClassification)), UIHint("EnumerationList")]
        public int Classification { get; set; }

        [UIHint("InsuranceCarrier")]
        public virtual string InsuranceCarrier { get; set; }

        // Non persisted extensions
        /// <summary>
        /// Non Persisted
        /// </summary>
        [NotMapped]
        public List<AppointmentInfo> AppointmentInfos { get; set; }
        /// <summary>
        /// Non Persisted
        /// </summary>
        [NotMapped]
        public List<AppointmentInfo> SiblingAppointmentInfos { get; set; }

        public IList<ReservationRequest> ReservationRequests { get; set; }

        [UIHint("QuickList")]
        public virtual ICollection<SpecialInstruction> SpecialInstructions { get; set; }

        public virtual PetSitterRestrictionPermission PetSitterRestrictionPermission { get; set; }
        public virtual PetSitterBehavior PetSitterBehavior { get; set; }
        public virtual PetSitterCleaningRecord PetSitterCleaningRecord { get; set; }
        public virtual PetSitterNote PetSitterNote { get; set; }


    }

Allergy Model

public class Allergy {
        public Allergy() { Id = Guid.NewGuid(); }
        [ScaffoldColumn(false)]
        public Guid Id { get; set; }
        public string Name { get; set; }
        public string Treatment { get; set; }
    }

How could I avoid above error when I try to add 2nd record ?