외부 API에서 영화 데이터를 검색합니다. 첫 번째 단계에서는 각 영화를 긁어 내 데이터베이스에 삽입합니다. 두 번째 단계에서는 API의 "변경 사항"API를 사용하여 정기적으로 데이터베이스를 업데이트하여 정보를 변경 한 영화를 확인할 수 있습니다.
내 ORM 레이어는 엔터티 프레임 워크입니다. Movie 클래스는 다음과 같습니다.
class Movie
{
public virtual ICollection<Language> SpokenLanguages { get; set; }
public virtual ICollection<Genre> Genres { get; set; }
public virtual ICollection<Keyword> Keywords { get; set; }
}
문제는 영화를 업데이트해야 할 때 발생합니다. 데이터베이스는 추적중인 객체와 업데이트 API 호출에서 수신 한 새로운 객체를 다른 객체로 간주하여 무시 .Equals()
합니다.
업데이트 된 동영상으로 데이터베이스를 업데이트하려고하면 기존 동영상을 업데이트하는 대신 데이터베이스를 삽입하기 때문에 문제가 발생합니다.
나는 언어와 함께이 문제를 가지고 있었고 내 해결책은 첨부 된 언어 객체를 검색하고 컨텍스트에서 분리하고 PK를 업데이트 된 객체로 이동하여 컨텍스트에 첨부하는 것이 었습니다. 때 SaveChanges()
지금 실행, 그것은 본질적으로 대체됩니다.
Movie
객체에 대한이 접근 방식을 계속 하면 영화, 언어, 장르 및 키워드를 분리하고 데이터베이스에서 각각을 조회하고 ID를 전송하고 새로운 물건.
더 우아하게 처리 할 수있는 방법이 있습니까? 이상적으로는 업데이트 된 영화를 컨텍스트에 전달하고 Equals()
메소드를 기반으로 업데이트 할 올바른 영화를 선택하고 모든 필드와 각 복잡한 객체 를 업데이트하도록하고 싶습니다 . 자체의 Equals()
메소드를 기반으로 기존 레코드를 다시 사용 하고 다음을 삽입하십시오. 아직 존재하지 않습니다.
.Update()
연결된 모든 객체를 검색하는 조합으로 사용할 수있는 각 복잡한 객체에 메소드를 제공하여 분리 / 연결을 건너 뛸 수는 있지만 기존의 모든 단일 객체를 검색하여 업데이트해야합니다.
id
가 있으며 외부 API의 영화는 필드를 사용하여 로컬 영화와 일치합니다 tmdbid
. 영화, 장르, 언어, 키워드 등에 관한 것이므로 한 번의 호출로 업데이트해야하는 모든 항목을 검색 할 수 없습니다. 각 항목에는 PK가 있으며 데이터베이스에 이미있을 수 있습니다.