koleksiyonlarını güncelleyerek değildir., bunu daha önce çalıştırmak değil
public class Schedule: BaseEntity
{
public Guid Id {get;set;}
public virtual int? DayOfTheWeekTypeId { get; set; }
public virtual DayOfTheWeekType DayOfTheWeekType { get; set; }
public virtual ICollection<Instructor> Instructors { get; set; }
public DateTime? StartDateTime { get; set; }
public DateTime? EndDateTime { get; set; }
public string SpecialInstructions { get; set; }
}
Haritalama sınıfı: Bu benim değiştirirseniz
public void ApplyCurrentValues<TEntity>(TEntity original, TEntity current) where TEntity : class
{
base.Entry<TEntity>(original).CurrentValues.SetValues(current);
}
"birleştirme" ele Yöntem olduğunu
public virtual void Update(TEntity entity)
{
if (entity == null)
throw new ArgumentNullException("entity");
//this is the original persisted entity
var persistedEntity = _repository.GetById(entity.Id);
if(originalEntity != null)
{
entity.Id = persistedEntity.Id;
UnitOfWork.ApplyCurrentValues<TEntity>(originalEntity,entity);
UnitOfWork.Commit();
}
}
:
public ScheduleMapping()
{
HasMany(c => c.Instructors).WithMany().Map(m => { m.MapLeftKey("ScheduleId");
m.MapRightKey("InstructorId");
m.ToTable("Schedule_Instructors");
});
HasOptional(s => s.DayOfTheWeekType).WithMany().HasForeignKey(s => s.DayOfTheWeekTypeId).WillCascadeOnDelete(false);
Property(s => s.SpecialInstructions).IsMaxLength();
}
Bu benim güncelleme yöntemidir Eğitmenler koleksiyonu daha sonra e güncelleme, orijinal değerlerimi koruyor gibi görünüyor. Güncellemeden önce Zamanlama varlığını yüklemeyi denedim ve değişikliklerimi yapmam gerekiyor, ancak bazen bu durum, varlık çerçevesindeki bir PK hatası (Eğitmenler koleksiyonunda) neden oluyor. Aynı anahtara sahip bir varlık eklemeye çalışıyormuş gibi. Bu yüzden, bunun yerine Program kimliğini (ID dahil) yeniden oluşturuyorum ve sonra güncelliyorum. Bunu yaptığımda daha fazla hata alamıyorum, ancak Eğitmen koleksiyonları değişmez. Düşünüyorum çünkü CurrentValues. SetValues, güncellenmiş sürümüm değil, kalıcı varlığa dayalı olarak uygulanıyor. Güncelleştirmelerimi farklı şekilde ele almalı mıyım yoksa manully
Bu konuda çok üzüldüm ve unutmuştum. Eski bazı örneklere baktığımda EF ilk öğrenirken POC'm vardı, bunu uzun zaman önce anladım. Tek tek koleksiyonları manuel olarak güncellemeye geri döndüm. EF, otomatik olarak ele geçirinceye kadar şu anda mantıklı geliyor. Teşekkürler Ladislav – DDiVita
Ancak, bir navigasyon özelliği için eşleşen bir 'ID' güncellemesi yapar ve bu cevap beni yanlış yolda bıraktı. Benim asıl problemim, zaten ayarlanmış olan ID'de ayarlanmış olan ID ile ilgili yapmaktır. Yani 'SetValues' değişmediğini düşündü, bu yüzden 'IsModified' bitini çevirmedi, ki bu da değerin kalıcı olmadığı anlamına geliyordu. 'SaveChanges() '. –