Я столкнулся с неожиданной ситуацией, когда у меня есть ссылки на объект, удаленный из встроенного списка, когда я добавляю этот же объект в другой встроенный список.
У меня есть следующие классы:
public class Advice
{
public Advice()
{
ViewPermissions = new HashSet<ViewPermission>();
Contents = new HashSet<CategoryScore>();
}
public int Id { get; set; }
[Required]
public int StudentId { get; set; }
[Required]
public DateTime Date { get; set; }
public string AdviceText { get; set; }
[Required]
public virtual ICollection<CategoryScore> Contents { get; set; }
public virtual ICollection<ViewPermission> ViewPermissions { get; set; }
}
public class CategoryScore
{
public int Id { get; set; }
[Required]
public string CategoryLabel { get; set; }
[Required]
public string Description { get; set; }
[Required]
public float SRLScore { get; set; }
}
, в котором Advice должен иметь несколько ссылок на CategoryScore объектов. Предполагается, что эти объекты CategoryScore часто разделяются между многими Советами, поэтому предполагается, что на один объект CategoryScore ссылаются из списков многих Советов.
Однако, когда я использую этот код, чтобы сохранить все в DBContext ...
//creation of the CategoryScore objects
//adding the CategoryScore objects to this dbContext (the this keyword is the context)
this.Categories.Add(categoryScore1);
this.Categories.Add(categoryScore2);
this.Categories.Add(categoryScore3);
this.Categories.Add(categoryScore4);
this.Categories.Add(categoryScore5);
this.Categories.Add(categoryScore6);
this.Categories.Add(categoryScore7);
this.Categories.Add(categoryScore8);
this.Categories.Add(categoryScore9);
//creating new Advice objects
var studentAdvice1 = new Advice
{
StudentId = 1337,
Date = DateTime.Now
};
var studentAdvice2 = new Advice
{
StudentId = 1138,
Date = DateTime.Today
};
var studentAdvice3 = new Advice
{
StudentId = 4242,
AdviceText = "You are perfect",
Date = DateTime.Today.AddDays(7)
};
var studentAdvice4 = new Advice
{
StudentId = 1138,
Date = DateTime.Today.AddDays(-14)
};
var studentAdvice5 = new Advice
{
StudentId = 1138,
Date = DateTime.Today.AddDays(14)
};
var studentAdvice6 = new Advice
{
StudentId = 1138,
AdviceText = "You have completed all learning objectives of the semester. Well done!",
Date = DateTime.Today.AddDays(33)
};
//adding the categoryScore objects to the lists of the new Advice objects
studentAdvice1.Contents.Add(categoryScore3);
studentAdvice1.Contents.Add(categoryScore6);
studentAdvice1.Contents.Add(categoryScore9);
studentAdvice3.Contents.Add(categoryScore1);
studentAdvice3.Contents.Add(categoryScore4);
studentAdvice3.Contents.Add(categoryScore7);
studentAdvice4.Contents.Add(categoryScore3);
studentAdvice4.Contents.Add(categoryScore6);
studentAdvice4.Contents.Add(categoryScore9);
studentAdvice2.Contents.Add(categoryScore2);
studentAdvice2.Contents.Add(categoryScore5);
studentAdvice2.Contents.Add(categoryScore9);
studentAdvice5.Contents.Add(categoryScore1);
studentAdvice5.Contents.Add(categoryScore5);
studentAdvice5.Contents.Add(categoryScore8);
studentAdvice6.Contents.Add(categoryScore1);
studentAdvice6.Contents.Add(categoryScore4);
studentAdvice6.Contents.Add(categoryScore7);
//**** BREAKPOINT 1
//adding the Advice objects to this dbContext (the this keyword is the context)
this.Advices.Add(studentAdvice1);
this.Advices.Add(studentAdvice2);
this.Advices.Add(studentAdvice3);
this.Advices.Add(studentAdvice4);
this.Advices.Add(studentAdvice5);
this.Advices.Add(studentAdvice6);
//**** BREAKPOINT 2
//saving everything
this.SaveChanges();
... каждый из объектов CategoryScore существует только в одном из Советов (последнем, в который он был добавлен), как если бы CategoryScore удалялся из списка, в который он был добавлен как только он будет добавлен в другой список.
Когда я проверяю выполнение кода:
- в BREAKPOINT 1, все локальные объекты studentAdvice по-прежнему имеют все объекты categoryScore ( таким образом, каждый studentAdvice имеет три из этих объектов).
- в BREAKPOINT 2, каждый объект categoryScore существует только в одном studentAdvice, который является объектом studentAdvice, который последний раз добавлялся в контекст
Я довольно новичок в Entity Framework, но я не могу понять, что я делаю здесь неправильно. Я надеюсь, что текст ясно показывает, чего я хочу достичь. Если нет, я могу предоставить ожидаемый json ответ и фактически возвращенный json ответ.
Заранее спасибо:)