저는 EF 및 WebAPI를 사용하고 많은 하위 속성 (예 : 도시, 국가 등)을 가진 새 객체를 저장하려고합니다. 이러한 속성에 대한 데이터는 외부 소스에서 가져 왔지만보고 목적으로 개체와 함께 내 데이터베이스에 저장하려고합니다. 이런 이유로 새로운 부모와 함께 전달되는 새로운 자식이 이미 존재하는지 확인해야합니다 (데이터베이스에서 가져 오지 않았 음을 기억하십시오).엔티티 프레임 워크 - 하위 엔티티 저장
예를 들어 내가 저장 한 도시를 선택한 경우 전달 된 객체에 내 도시 ID가 없어서 EF에서 새 항목이라고 생각하여 중복 행을 저장합니다.
DB에 이미있는 경우 연결을 시도했지만 첨부 할 수 없습니다. 아이템이 컨텍스트에 의해 이미 추적되고 있다고합니다.
다음은 새 부모를 저장하기 전에 하위 컬렉션 중 하나를 확인하고 저장하는 코드입니다.
foreach (HBCountry country in hbcampaign.HBTargetingSpec.HBCountries)
{
if (db.HBCountries.Any(c => c.country_code == country.country_code))
{
country.CountryID = db.HBCountries.Where(c => c.country_code == country.country_code)
.FirstOrDefault()
.CountryID;
db.HBCountries.Attach(country);
}
else
{
db.HBCountries.Add(country);
}
}
나는 나의 상황에서 기존 엔티티의 ID를 잡기 위해 필요하지만 그 후 나는 첨부 EF이 항목에 대한 새 항목을 만들 필요가 없다는 것을 알려 수 없습니다.
저는 EF에 처음 접했고 아이 콜렉션을 가진 엔티티를 저장/업데이트하는 데 어려움을 겪고 있습니다. 상황이 문맥에 붙어있을 때와 그렇지 않을 때 내 마음을 감싸는 것처럼 보일 수 없습니다.
을 코딩 할 것입니다. 부모를 가져 와서 하위 엔티티를 추가하려면 parent.Childern.Add() 또는 parent.ChildernId = id를 사용하십시오. 여기 Lazy Loading을 사용하지 않기를 바랍니다. –
'Count()> 0'보다'Any() '를 사용하는 것이 더 좋습니다. 'Count()'루프가 전체 콜렉션을 통해 반복되고, 조건없이 첫 번째 항목에서'Any()'가 보입니다. –
감사. Any()를 사용하도록 코드를 업데이트했습니다. 나는 아직도 찔 렸어. 내 자신의 데이터 소스에서 자식 속성을 당기는 경우 큰 문제가 아니지만 기본적으로 매번 "새"항목을 보내고 있기 때문에 (즉, 아직 내 DB에서 ID가없는 경우) . 이것이 매우 어리석은 경우에는 미안합니다. 나는 EF를 잡기 위해 정말로 고심하고있다. – GooseZA