나는이 수업이 : 다음EF Core가 자동으로 Collection 등록 정보를 포함하게하는 것은 무엇입니까?
public class Subject
{
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
[StringLength(50)]
public string Code { get; set; }
public int LevelId { get; set; }
public int? ParentId { get; set; }
public int Order { get; set; }
[ForeignKey("LevelId")]
public Level Level { get; set; }
[ForeignKey("ParentId")]
public Subject Parent { get; set; }
public ICollection<Subject> Children { get; set; }
[Column(TypeName = "datetime2")]
public DateTime? DeletedAt { get; set; }
}
와 I가이 2 개의 저장소 방법 :
public Subject GetById(int subjectId)
{
var subjectFound = _context.Subjects.Where(subj => subj.Id == subjectId)
.SingleOrDefault();
var subject = _mapper.Map<Subject>(subjectFound);
if (subjectFound != null)
{
subject.Children = GetChildren(subject.Id).ToList();
}
return subject;
}
public void Update(Subject existingSubject)
{
var subjectToUpdate = _context.Subjects.Where(subj => subj.Id == existingSubject.Id)
.SingleOrDefault();
if (subjectToUpdate != null)
{
_mapper.Map(existingSubject, subjectToUpdate);
_context.Update(subjectToUpdate);
SaveChildren(subjectToUpdate.Id, existingSubject.LevelId, existingSubject.Children);
_context.SaveChanges();
}
}
당신이이 방법에 대한 LINQ 문을 보면, 그들은 같은 단지 다른 변수 이름입니다 where 절에는 ID와 동일한 값이 있습니다.
지금 일어나고있는 첫 번째 방법 (GetById)은 LINQ 쿼리 후 Children이 null이기 때문에 그 안에 GetChildren 호출이있는 이유입니다.
그러나 두 번째 방법 (업데이트)에서 LINQ 쿼리 후에 반환 된 개체의 자식이 모두 있습니다. 그들은 동일한 질의이고 동일한 값을 가지고 있는지 확인하기 위해 반복적으로 점검했습니다.
이 호출을하기 전에 특별한 사전 코드가 없습니다. 그들은 단지 정상적으로 호출됩니다. 그래서 나는이 행동에 대해 정말로 혼란스러워합니다. 무엇이 이것을 일으킬 수 있습니까?