2011-08-15 5 views
3

Entity Framework와 관련된 .edmx 파일을 둘러싼 연구를하고 있습니다.EF & .EDMX 성능 고려 사항

우리의 현재 설치에는 우리가 광범위하게 사용하는 라이브러리에 컴파일 된 여러 파일이 있습니다. 물론, 이것은 우아한 해결책이 아닙니다. 데이터베이스 레이어에서 무언가를 업데이트하거나 추가 할 때마다이 라이브러리를 다시 컴파일해야합니다.

우리는 저장 프로 시저를 독점적으로 사용하며, 현재 우리의 접근 방식은 개체 컨텍스트에서 ExecuteFunction 메서드를 사용하는 것입니다. 그러나 edmx 파일의 가져온 함수가 어떤 형식을 반환하는지 (context.ExecutionFunction<T>()ObjectResult<T>을 반환) 지식이 필요합니다.

이론적 인 해결책은 사용하려는 .edmx 파일을 상대 경로에 저장하고 런타임에 라이브러리에로드하는 것입니다.

아무도 전에 이것을 시도 했습니까? 작동합니까? 고려해야 할 성능 고려 사항이 있습니까? 이것은 전자 상거래 환경에서 사용될 것이므로 효율성과 속도가 중요합니다. 좀 더 명확하게하기 위해

편집 :

확실히 this의 사용을 허용 할 수있는, 자신의 어셈블리에서 각 .edmx 파일을 컴파일 할 수있을 것입니다. 그것에 대한 어떤 입력도 좋을 것입니다.

우리가 만드는 전화는 이제 생성자에서이

Database.MakeCall<T>("stored_procedure_name", parametersCollection, KnownDatabases.Database); 

같은 것이, 데이터베이스 핸들러 (라이브러리에있는 각 the.edmx 파일)이 약을 알고있는 데이터베이스 컨텍스트의 각각의 인스턴스를 개최한다입니다 . KnownDatabases 열거 형을 사용하여 쿼리를 실행할 데이터베이스를 선택합니다.

Database.MakeCall<T>("context_name", "stored_procedure_name", parametersCollection); 

데이터베이스 핸들러, 생성자에 .edmx 파일을 폴더를 검색하고 모든 저장 한 다음 인스턴스를로드합니다 :

이상적으로,이 같은 전화를 달성하고 싶습니다 컨텍스트 이름에 대한 각 컨텍스트의 T을 정의하거나 얻는 방법이 지금 약간 흐릿합니다. 두 경우 모두

, 반환 형식이 될 것입니다 당신이 고려해야하는 것 같아서 무엇 ObjectResult<T>

답변

0

은 루비 - 억양 DB 매핑, 당신은 DB를 관리 할 필요가 없습니다 있도록 DB 스키마가 런타임에 결정된 하나입니다 -ORM 맵핑 라이브러리 코드.

.net의 경우 Subsonic에는 Castle과 nHydrate와 같은 ORM이 있습니다. 그 시스템은 C++ 구현 (ODB)이 좋은 성능 통계를 가지고 있기 때문에 잘 수행 할 수 있습니다. (스키마가 코드 롬을 생성하더라도이 코드는 자동으로 수행됩니다.)

+0

접근 방법이 확실하지 않습니다. . 이상적으로 우리가 제공하는 데이터베이스에 대해 스토어드 프로 시저 (이름을 알고있는)를 실행할 수 있어야합니다. 지금 당장은 모든 데이터베이스에 대해 새로운 .edmx 파일을 생성하고이를 라이브러리에 컴파일함으로써 얻을 수 있습니다. 달성하고자하는 것은 실행되는 데이터 모델에서 저장 프로 시저를 실행하는 코드를 분리하는 것입니다. – AndyBursh

관련 문제