2012-06-05 2 views
0

EF를 사용하고 있으며 컨텍스트에서 ExecuteStoreCommand 함수를 통해 간단한 SQL 호출을 사용하여 테이블에서 행을 삭제 한 컨텍스트가 있습니다. 다른 이유로). 그것은 잘 작동하지만 상황은 어떤 일이 일어 났는지 알지 못합니다.SQL을 사용하여 개체 삭제 및 컨텍스트 업데이트

커밋이 영향을받는 행의 예상 개수를 제공하지 않기 때문에 일부 변경 내용을 커밋하려고 할 때 동일한 컨텍스트를 사용할 때 문제가 발생합니다.

내 질문은 내가 만든 변경 사항 (삭제 된 행)으로 컨텍스트를 업데이트하는 가장 좋은 방법입니다.

이미 삭제 된 개체를 가져 와서 상황에 맞는 새로 고침 기능에서 사용하려고 시도했지만 실제로 작동하지 않습니다. 삭제 된 개체를 가져올 때 null 참조를 얻었 기 때문일 수 있습니다. 이 삭제 된있는 개체를 모르기 때문에, 하나 나를 위해 작동하지 않습니다 ObjectStateManager.GetObjectStateEntries을 사용하여 또한

_ctx.Refresh(RefreshMode.StoreWins, _ctx.Employees.FirstOrDefault(s => s.EmployeeId == employeeId)); 

.

에 내가 원하는하지 않습니다

  • 컨텍스트를 다시 만듭니다.
  • 필요한만큼 새로 고침하십시오.
  • 게으른로드로 혼잡합니다.

삭제 한 후 컨텍스트를 다시 가져 오려고합니다. Btw은

var employee = ctx.ObjectStateManager.GetObjectStateEntries(~EntityState.Detached) 
            .Where(e => !e.IsRelationship) 
            .Select(e => e.Entity) 
            .OfType<Employee>() 
            .FirstOrDefault(e => e...); 
if (employee != null) ctx.Detach(employee); 

: - (당신은 당신이 수행하는 방법을 모르는 경우와 솔루션은 새로운 상황에 맞는 당신이 어떻게 든 삭제 된 개체를 식별해야합니다)

답변

1

이보십시오. 첨부 된 엔티티에 직접 SQL 수정을 사용하지 마십시오. 당신이 할 수있는 최악의 작전입니다. EF는 이것을 기대하지 않으며 그것을 처리 할 수 ​​없습니다. 이 경우 가장 좋은 해결책은 컨텍스트를 다시 만드는 것입니다.

+0

대단히 감사합니다. 나는 확실히 그것을 시도 할 것이다. 개체가 다른 개체의 목록에있는 경우에도 작동합니까? 직접 SQL 수정을 사용해서는 안되지만 성능 향상을 위해이 작업을 수행해야했습니다. –

+0

이것은 내가 바라는대로 정확하게 작동하는 것 같습니다. 기존 회사 개체의 목록에 포함되어 있어도 올바른 직원 개체가 분리되는지 여부를 알려주시겠습니까? –

+0

올바르게 분리하고 모든 관계에 참조를 포함하지 않도록 수정해야합니다. –

관련 문제