엔티티 프레임 워크 6에서 AsNoTracking 및 LazyLoadingEnabled = false
으로 엔티티를로드하고 싶습니다. 일부 특수한 경우에 일부 콜렉션을 명시 적으로 다시로드하고자합니다. 분리 된 엔티티 컬렉션을 명시 적으로로드하려면 어떻게해야합니까?엔티티 프레임 워크 컨텍스트에 기존 엔티티를 제네릭으로 첨부하려면 어떻게합니까?
기존 엔티티를 컨텍스트에 연결하는 일반 옵션을 찾고 있습니다.
내 호출은 다음과 같습니다
var myCar = await this.myCarRepositoryAccessor.GetById(this.UnitOfWork, 1).ConfigureAwait(false);
this.UnitOfWork.LoadCollection(myCar, e => e.Driver);
GetById 같은 외모와 DataRepository에서 :
처럼의 UnitOfWork에서public Task<TEntity> GetById(int id)
{
return id == 0
? Task.FromResult(default(TEntity))
: this.Context.InternalSet<TEntity>().AsNoTracking()?.SingleOrDefaultAsync(p => p.Id == id);
}
LoadCollection 보이는 : 내가 설정하려고 한
public void LoadCollection<TEntity, TElement>(TEntity entity, Expression<Func<TEntity, ICollection<TElement>>> navigationProperty) where TEntity : class, IEntity where TElement : class
{
//this.context.Entry(entity).State = EntityState.Unchanged
this.context.Entry(entity).Collection(navigationProperty).Load();
}
엔티티 상태는 Unchanged
이지만 다음과 같은 오류 메시지가 표시됩니다.
동일한 유형의 다른 엔터티에 이미 동일한 기본 키 값이 있으므로 'MyCar'유형의 엔터티를 연결하지 못했습니다. 이것은 'Attach'방법을 사용하거나 그래프의 엔티티 중 하나가 충돌하는 키 값을 갖는 경우 엔티티의 상태를 '변경되지 않음'또는 '수정 됨'으로 설정할 때 발생할 수 있습니다. 이는 일부 엔티티가 새롭고 아직 데이터베이스 생성 키 값을 수신하지 않았기 때문일 수 있습니다. 이 경우 'Add'메소드 또는 'Added'엔티티 상태를 사용하여 그래프를 추적 한 다음 비 신규 엔티티의 상태를 'Unchanged'또는 'Modified'로 적절하게 설정하십시오.
컬렉션을로드하기 전에 엔티티 연결을 시도 했습니까? 예 : 'this.context.Set() .Attach (entity); ' –
DavidG
특별한 경우에만 컬렉션을 다시로드하고 싶습니다. 그것이 효과가있다, 내가 전에 그것을 준다면 나는 알고있다. –
죄송합니다, 당신이 무슨 말을하는지 이해가 안됩니다. – DavidG