부모는 속성 LastChildrenName
과 자식 목록 LastChildrenName
집니다.
parent.Children.Add(new Children(){ Name = "FirstChild" };
parent.Children.Add(new Children(){ Name = "SecondChild" };
parent.Children.Add(new Children(){ Name = "ThirdChild" };
DbContext.Set<Parent>.Update(parent);
DbContext.SaveChanges();
DbContext.SaveChanges();
SaveChanges ()를 처음 호출하기 전에 디버깅하는 동안 LastChildrenName
에는 SaveChanges()
후에 만 새 ThirdChild
행이 db에 나타나고 LastChildrenName
열에 값 SecondChild
가있는 ThirdChild
의 적절한 값이 있습니다.
바로 다음에 SaveChanges()
호출하면 다음 행의 코드에서 부모 열 LastChildrenName
이 적절한 값으로 업데이트됩니다.
그러나 그것은 또한 피하기를 원하는 부모 테이블에 업데이트 트리거를 두 번 발생시킵니다.
EF Core 설정이 없거나 DB에서 한 번만 업데이트하려면 부모 모델에 사용할 수있는 방법이 있습니까? 또한 LastChildrenName 속성의 get
메서드를 변경하지 않는 것이 좋습니다.
public class Parent
{
public int Id;
public ICollection<Children> Childrens {get;set;}
public string LastChildrenName => this.Childrens.OrderBy(x => x.Id).Select(x => x.Name).LastOrDefault(x => !string.IsNullOrWhiteSpace(x));
}
어린이 모델 :
public class Children
{
public int Id;
public string Name;
public Parent Parent;
}
OrderBy(x => x.Id)
는 자식을 ID로 OrderBy(x => x.Id)
하지만 자식을 데이터베이스에 저장하기 전에는 아직 알려진 ID가 없습니다. 따라서 먼저 간단한 ThirdChild
하여 FirstChild
및 SecondChild
가 이미 ID 1
및 2
저장되어 있고 ThirdChild
가 컨텍스트에 추가되었지만 아직 저장되지 않은 경우 세 번째 자식은 ID 0
으로 간주되므로 SecondChild
는 여전히 가장 높은 ID를 가진 것으로 간주됩니다.
한 번에 하나의 하위 항목 만 추가하는 경우 OrderBy
수정하여 0
이 항상 마지막에 표시되도록 할 수 있습니다. 예를 들어, OrderBy(x => x.Id == 0).ThenBy(x => x)
쓸 수 있습니다.
동시에 여러 자식을 추가하는 경우 개체가 특정 순서로 데이터베이스에 저장된다는 보장이 없기 때문에 이것이 전혀 작동하지 않을 것이라고 생각합니다. 이 방법을 사용하려면 서버가 아닌 클라이언트에서 ID를 생성하도록 전환해야합니다. 또는 작성 날짜 / 시간 및 순서를 대신 추가 할 수 있습니다.