웹 API를 통해 CRUD 메서드를 제공하는 ASP.Net MVC 6/ASP.Net Core 1.0을 기반으로하는 응용 프로그램이 있습니다.Entity Framework 7.0.0-rc1/EntityFrameworkCore 1.0.0을 사용하여 하위 엔터티 차등 저장
Entity Framework 7.0.0-rc1을 사용하고 있습니다. 모든 것을 EF Core 1.0/ASP.Net Core 1.0으로 마이그레이션 할 계획이지만 아직 수행하지 않았습니다. 여기
은 나에게 설계 문제가 발생 모델의 유형의 조각의 모든 관계를 제대로 내ApplicationContext
클래스에서 보장하는
public class ParentEntity
{
public int Id { get; set; }
public virtual ICollection<ChildEntity> ChildCollection { get; set; } = new ChildCollection();
}
public class Child
{
public int Id { get; set; }
public virtual ParentEntity ParentEntity { get; set; }
public int? ParentEntityId { get; set; }
}
을, 모든 CRUD 작업은의를 추가 및 업데이트를 포함하여, 예상대로 작동 ParentEntity가 저장 될 때 하위 엔터티
// On some web API Save method :
[HttpPost]
public JsonResult Save(ParentEntity entity)
{
if (entity.Id > 0) _context.Update(entity);
else _context.Add(entity);
var result = _context.SaveChanges();
return Json(result);
}
저장 방법에 전달 된 개체 내 AngularJS와 백엔드에서 오는 :
예를 들어, 여기에 내가 API를 통해 노출 저장 방법의 종류입니다. 자식 엔티티가 추가 또는 수정 된 동안 모든 것이 예상대로 작동합니다.
백 엔드가 A
및 B
이라는 ChildEntity
두 개가로드 된 ParentEntity
을 수신했다고 가정 해 봅시다.
이제 백엔드에서 B 하위 엔티티를 제거하고 저장 메소드에 게시합니다. 모든 업데이트가 ParentEntity
과 ChildEntity
A.
에 유지됩니다하지만 B ChildEntity
가 무엇에 아무런 표시가 없었기 때문에 논리적 보인다 데이터 저장소에 남아 :
백엔드는 수신 데이터의 변경 사항을 저장 그것으로해라.
제 질문은입니다. 매우 일반적인 경우 인 것 같습니다. 어떻게 처리해야합니까?
나는 자식 컬렉션을 저장하고, 변경 사항을 저장하고, 루트 엔티티를 다시로드하고, 컬렉션을 비교하고, 제거해야 할 것인지를 결정한 다음이를 제거하는 것을 상상했습니다.하지만 꽤 어렵고 더러운 것 같습니다. 더 좋은 방법이 있습니까?
상태 추적 메커니즘이 ADO.Net 데이터 세트에서 EF 코어, EF <= 4 (ObjectContext 및 EF> = 4.1 및 DbContext)를 통해 구현 된 방법에 대한 매우 흥미로운 게시물입니다. 따라서 필자가 이해하는 한, 연결이 끊긴 엔터티 내에서 자식 개체의 차등 삭제를 처리하는 특정 문제를 해결하는 방법을 설명하지 못합니다. – kall2sollies