2010-01-31 4 views
4

여기에 고급 사용자를위한 질문이 약간 다를 수도 있습니다.EDMX 파일을 생성하고 컴파일해야합니다.

관리자가 사용자 지정할 수있는 웹 응용 프로그램이 있습니다. 이는 관리자가 새 테이블 스키마를 추가하거나 테이블 열을 편집하고 테이블 열을 새로 추가 할 수 있음을 의미합니다. 이러한 변경 사항은 변경 후 게시되는 논리 개체 (EDMX와 유사)에 매핑됩니다. 게시하는 동안 필요한 변경 사항을 사용하여 저장 프로 시저를 생성합니다.

UI에서 우리는 이러한 논리적 개체를 사용하여 DB를 연결합니다 (매핑을 이해하고 적절한 sprocs 및보기 등을 실행하는 COM 사용). 이제 우리는 현재 가지고있는 논리적 개체 모델을 대체하기 위해 EF를 사용하려고 생각하고 있습니다. 동적으로 EDMX 파일 (csdl, msl, ssdl, cs 파일)을 만들 수 있지만 DLL을 동적으로 컴파일하고 클래스를 DLL로 패키지하는 방법을 모르겠습니다. 즉, 버튼을 클릭하면 모든 edmx 관련 파일이 만들어지고 CS 파일을 기반으로 DLL을 만들어야하며 웹 사이트는 코드의 새로운 변경 사항에 액세스 할 수 있어야합니다.

cs 파일을 자동으로 동적으로 컴파일하는 방법을 알려주십시오. 고객의 끝에 다른 파일 (예 : default.aspx 및 기타)의 소스 코드가 없습니다.

감사 알버트

답변

2

쉘에서 CSC를 시도하는 대신 CSharpCodeProvider.CompileAssemblyFromFile을 사용하는 것이 좋습니다.

주의해야 할 사항 : 코드를 컴파일 한 다음 다시 컴파일하려고하면 작성된 어셈블리를 잠글 수 있습니다. 이를 위해 새 AppDomain을 만들고 거기에서 컴파일 한 다음 AppDomain을 언로드하는 AsyncCompiler를 만들었습니다.

꽤 털이 많은 코드이지만 AEF XML 파일을 생성하고 코드를 생성 한 다음 어셈블리로 모든 것을 컴파일하면됩니다. 제대로 작동합니다. 내가 옳지 않은 유일한 방법은 동적으로 저장 프로 시저를 가져 오는 것입니다. 제 SSDL에는 CSDL이나 MSL이 없습니다. 솔루션 검색을 통해 나를 이끌 수있었습니다.

여기 키워드가 올바른 방향으로 벗어나기를 바랍니다.

+0

감사합니다. TonyG, asynccompiler의 코드 스 니펫 (스켈레톤 일 수 있음)을 제공 할 수 있습니까? 네, 키워드가 나를 많은 장소로 인도하고 있습니다. – Bepenfriends

+0

컴파일러에서 수행 한 작업을 대략적으로 설명 할 수 있습니까? 나는 비슷한 상황에 처해있다. edmx 자체에서 .csdl, .msl 콘텐츠를 추출하여 어셈블리에 포함하려고합니다. –

+0

불행히도 나는 4 년 전에 그렇게했고 잠시 후에 다시 방문하지 않았다. 그래서 내 기억은 지금 당신에게 쓸모가 없습니다. 미안 해요. 하지만 내가 나중에 파헤칠 수있는 아주 멋진 코드였습니다. 당신이 회사 프로젝트에서 일하고 있다면 아마도 나는 이것을 위해 시계에 시간을 할애 할 수있다. 그렇지 않으면 나는 더 이상의 노력을 우선시 할 수 없다. 저장된 procs 문제는 단순히 사용하고있는 EF 버전에서 지원되지 않았지만 지금은 있어야한다는 것입니다. 더 도움이되기를 바랍니다. – TonyG

0

난 정말 아직 당신을위한 확실한 대답이없는 -하지만 두 가지 가능한 해결책은 아마도 가까운 미래에로 볼 수 있습니다 :

1)의 집합있다 데이터베이스에서 Linq-to-SQL 모델 (DBMX) 및 관련 * .cs 파일을 생성하는 PLINQO이라는 CodeSmith 템플릿. Entity Framework 지원에 대해 그들에게 물어 보았습니다. 그리고 그들은 Entity Framework 지원 작업을 확인했습니다. 곧 그렇게 될 것입니다.

이들은 코드 생성 및 모델 생성 템플릿이므로 Linq-to-SQL의 경우와 EDMX의 경우를 조정할 수 있습니다. 약간의 일이지만, 확실히 가능합니다. * .cs 파일과 * .edmx 모델이 있으면 .NET이 설치된 모든 컴퓨터에 설치된 CSC (C#) 명령 줄 컴파일러를 사용하여 결과 어셈블리를 생성 할 수 있습니다.

2) .NET 4를 사용하면 새로운 Entity Framework 4에 코드 생성을 사용자 정의 할 수있는 T4 templates (다른 코드 생성 기술)이 포함됩니다. 여기서는 같은 이야기가 적용됩니다 - 클래스에 대한 외부 EDMX 모델 및 관련 * .cs 파일을 생성하고 해당 템플릿에서 즉시 어셈블리를 생성 할 수 있습니다.

해당 항목에 대해 blog post을 참조하십시오. gooling (또는 binging) 또는 "EF4 T4 templates"를 사용하면 많은 정보를 얻을 수 있습니다.

적어도 조금 도움이 되길 바랍니다.

+0

안녕하세요, 내 DB 용 EDMX 클래스와 CSDL 파일을 별도로 만들 수 있습니다. 그렇게하는 데 아무런 문제가 없습니다. 내 문제는 내가 EDMX (내 사용자 정의 프레임 워크에서)를 변경할 때마다 DLL에 클래스를 컴파일해야한다는 것입니다 (동일한 작업을 수행 할 수있는 폴더 권한이 있어야 제공됩니다). 웹 페이지 버튼 클릭. 나는 클래스 (class) 생성이 아닌이 장소에서 (컴파일하면서) 강타 당했다. 웹 사이트에서 CSC (서버의)를 호출하는 방법을 잘 모르겠다. – Bepenfriends

관련 문제