إطار كيان:خطأ في الانضمام الذاتي
-
21-12-2019 - |
سؤال
لدي الصف التالي:
public class Application
{
public int Id { get; set; }
/* Other properties */
public int LegacyId { get; set; }
public int LegacyParentId { get; set; }
public int? ApplicationSupersessionId { get; set; }
public virtual ICollection<Application> ApplicationSupersessions { get; set; }
public Application()
{
ApplicationSupersessions = new List<Application>();
}
}
أين ApplicationSupersessions
هو كيان اختياري انضم ذاتيًا.لدي بيانات تمت إضافتها بالفعل إلى حسابي Applications
الجدول وأحاول تعديل البيانات، والتي تبدو حاليًا كما يلي:
لكني بحاجة إلى التطبيقات 5413
و 5414
أن يكون لديك ApplicationSupersessionId
ل 5415
لأن هذا هو ما يبدو عليه نظامنا القديم، ولهذا السبب أضفت 2 Legacy
أعمدة
لذلك حاولت ما يلي:
var applications = CatalogueContext.Applications.ToList();
foreach (var application in applications)
{
var legacyChildren = applications.Where(x =>
x.LegacyParentId == application.LegacyId).ToList();
if(legacyChildren.Any())
{
foreach(var child in legacyChildren)
{
application.ApplicationSupersessions.Add(child);
}
CatalogueContext.Entry(application).State = EntityState.Modified;
}
}
CatalogueContext.SaveChanges();
لكني أحصل على الخطأ التالي على السطر CatalogueContext.Entry(application).State = EntityState.Modified;
:
المحلول
تمكنت من حل هذا.لقد تم إعداد العلاقة بشكل خاطئ في التكوين الخاص بي.
كان لدي هذا:
HasOptional(x => x.ApplicationSupersessions)
.WithMany()
.HasForeignKey(x => x.ApplicationSupersessionId)
.WillCascadeOnDelete(false);
عندما كان ينبغي أن يكون هذا:
HasMany(x => x.ApplicationSupersessions)
.WithOptional()
.HasForeignKey(x => x.ApplicationSupersessionId)
.WillCascadeOnDelete(false);
لست متأكدًا من الفرق وما إذا كان خطأ EF أم لا؟
لا تنتمي إلى StackOverflow