私は、このクラスがあります。自動的にEFコアにコレクションプロパティを含めるものは何ですか?
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; }
}
をそして、私はこれらの2つのリポジトリのメソッドしている:あなたはこれらの2つの方法のためのLINQ文を見れば、彼らは同じだけの別の変数名
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();
}
}
をしていますwhere句では検索されているのと同じ値を持っています。
最初のメソッド(GetById)には、LINQクエリの後で、子がnullであるため、その内部にGetChildren呼び出しがある理由があります。
ただし、2番目のメソッド(Update)では、LINQクエリの後に返されるオブジェクトにはすべて子があります。それらは同じクエリであり、私は同じ値を持っていることを確認するために何度も何度もチェックしています。
私はこれらの呼び出しの前に特別な事前コードはありません。彼らはちょうど正常に呼ばれています。だから私はこの行動によって本当に混乱している。これを引き起こす原因は何ですか?