2009-08-18 2 views
2

ScottGu의 블로그에서 그는 .NET 클래스에서 데이터 수정 내용을 사용자 정의하여 재정의 할 수 있도록 Linq 메서드를 SQL 클래스에 재정의하는 방법을 보여줍니다.삽입/업데이트/삭제에 대한 ADO.NET Entity Framework 사용자 지정 SQL 식

http://weblogs.asp.net/scottgu/archive/2007/08/27/linq-to-sql-part-8-executing-custom-sql-expressions.aspx

EF에서 동일한 기능을 수행 할 수있는 방법이 있나요 (삽입/업데이트/대한 사용자 정의 SQL 표현식 부분 삭제)?

답변

6

.

그러나 EF 4.0 우리는 ObjectContext에 새로운 방법을 ExecuteStoreCommand(..) 및 관련 방법 등

그래서 당신은 SaveChanges()을 무시할 수라는 추가 한

은, 지금은 가상이며,합니다 ( ObjectStateManager이 유형에 대한 ObjectStateEntries을 찾고 interograte 당신이 관심이있는 엔티티 스테이트 (예 : 삽입 된 것)에 있습니다.

일단 발견되면 새로운 ExecuteStoreCommand() 메소드를 사용하여 데이터베이스에 대해 직접 명령을 실행할 수 있습니다. 그런 다음 ObjectStateEntry에서 AcceptChanges()을 호출하면 EF가 이미 처리 한 데이터베이스의 변경 사항을 플러시하지 못하게됩니다.

그런 다음 base.SaveChanges()을 호출하여 EF가 나머지 변경을 수행하게 할 수 있습니다.

나는 이것이 이상적이지 않다는 것을 알고있다. 그러나, 내가

의 알렉스

+0

. 단지 내 자신을 요약하고 명확히하기 위해서. 나를 2시 1 분으로 내 질문을 나눠 보자) 그것이 가능 ef와 데이터베이스에 사용자 정의 원시 SQL을 보낼 수 있습니까? 2) 일부 메소드를 재정의하고 데이터 업데이트/삽입/삭제 프로세스를 사용자 정의 할 수 있습니까? 1)은 3.5가 아니라 4는 executestorecommand()를 사용하십시오. 2) SaveChanges를 재정의하고 원하는 것을하십시오. 그러나 3.5에서는 native sql을 실행할 수 없지만 다른 것은 수행합니다. 4를 위해 모두를하십시오. 옳은? –

+0

기본적으로 Yeap. 실제로 3.5에서 네이티브 SQL을 실행할 수도 있습니다. ObjectContext 아래에있는 EntityConnection에서 StoreConnection을 가져올 수 있기 때문입니다. 걱정해야 할 것은 트랜잭션 (3.5 및 4.0 모두)이지만 EF는 TransactionScope와 잘 작동하므로 트랜잭션이 가능합니다. –

1

EF를 사용하면 이러한 작업을 디자이너의 매핑 탭에있는 저장 프로 시저에 매핑 할 수 있습니다. 그런 다음 저장 프로 시저의 입력 및 출력 값을 개체의 다양한 속성에 매핑 할 수 있습니다. 당신이 정말로 sprocs가 아닌 다른 옵션을 가지고 있지 않습니다 EF 3.5

하는 데 도움이

희망,

+0

예 생각할 수있는 가장 좋은 해결 방법입니다,하지만 난 –

+0

엔티티 프레임 워크를 선택하는 개념의 이런 종류의 지원 (주소의 예처럼) .NET 측의 구현을 찾고 있어요 그러나 삽입, 삭제 (내 지식의 최고)에 대한 업데이트는 아닙니다. 이러한 작업에 대해 사용자 지정 SQL 스크립트를 사용하려면 저장 프로 시저를 사용해야합니다. 덕분에 – LorenVS

관련 문제