2011-04-06 3 views
4

지금까지 classLibrary 프로젝트를 만들고 새로운 Ado.net Entity 데이터 모델을 삽입하고 exixting 데이터베이스에서 genareting을 작성했습니다. 클래스 및 객체 클래스 코드가 자동으로 생성됩니다. 이것은 나에게 중요하지 않습니다.엔티티 프레임 워크 poco와 objectcontext 분리

하지만이 작업을 수행하고 Objectcontext 클래스 (예 : SomeEntities)와 테이블 classess를 두 개의 calss 라이브러리로 분리하려고합니다.

내가 데이터베이스 테이블 속성을 변경하면 edmx 모델을 업데이트하고 클래스가 자동으로 업데이트됩니다.

이 작업을 수행하는 방법은 무엇입니까? 내가 codefirst 사용하고 있지 않다 때문에 내가 databasefirst 사용하고, 내가 마찬가지로 modelfirst 사용하지 않을하고, 거기에 을 를 데이터베이스 및 datas을 가지고 있지만 당신은 내가 당신이 추측 제목에 "마시고"을 가지고 있기 때문에

+1

기존 데이터베이스와 함께 CodeFirst를 계속 사용할 수 있습니다. – taylonr

+2

@taylonr - 데이터베이스 우선 코드로 DbContext API를 사용하는 코드 우선 코드가 아닙니다. 코드 우선 = 코드를 작성하고 EF가 DB를 생성하도록합니다. Code-first! = DbContext API는 기존 데이터베이스에 유창한 매핑을 사용할 수 있으므로 DbContext API의 하위 집합과 코드 우선! = 유창 매핑이므로 코드가 아니라 데이터베이스가 먼저 만들어졌습니다. –

+1

귀하의 의견은 사실이지만 사람들이 사용하고있는 방법을 나타냅니다. 사람들이 코드를 먼저 작성한다고 말하면 DB 문맥과 POCO를 사용하고 있다는 것을 의미합니다. 특히이 경우 사용자는 DB를 처음으로 수행하는 방법에 대해 이야기하고 있으므로 edmx가 있습니다. 나는 더 명확해야하고 그가 코드 우선 스타일로 POCO를 할 수 있고 그의 DB를 덮어 쓸 수 없다고 말했다. – taylonr

답변

8

을 분리 할 수 EF4 POCO 생성기 T4 템플릿을 사용합니다.

그렇다면 POCO 클래스와 ObjectContext를 서로 다른 두 클래스 라이브러리로 분리 할 수 ​​있습니다. 이 두 가지 파일로 구성 때문에 T4 템플릿은 해당 시나리오에 대한 준비 :

  • POCOGenerator.Context.tt -> 파생 ObjectContext는
  • POCOGenerator.tt를 만들 책임 -> 만들 책임 POCO 개체

EDMX 파일이있는 클래스 라이브러리에 POCO 생성기를 추가하면 기본적으로 두 개의 tt 파일이 거기에 추가됩니다.

그러나 두 번째 파일 (POCOGenerator.tt)을 다른 클래스 라이브러리로 옮길 수 있습니다. 컨텍스트가있는 EDMX 프로젝트는이 라이브러리를 참조하여 POCO 클래스를 인식해야합니다. 그런 다음이 파일을 텍스트 편집기에서 엽니 다. 이제 (만 POCOGenerator.tt에서 변경 POCOGenerator.Context.tt를 떠나)에 edmx 파일의 경로를 변경해야

... 
string inputFile = @"MyModel.edmx"; 
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile); 
... 

:처럼이 파일의 첫 번째 라인 중 일부는 볼 것이다. 당신이 edmx 프로젝트 및 Visual Studio의 동일한 솔루션에 POCO 프로젝트가 가정, 새 경로는 다음과 같을 수 있습니다

... 
string inputFile = @"..\..\MyEDMXProject\MyModel.edmx"; 
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile); 
... 

지금 당신이 두 개의 서로 다른 프로젝트와는 별도로 두 파일을 실행할 수 있습니다. 하나는 컨텍스트 파일을 만들고 다른 하나는 POCO 파일을 만듭니다.

+0

님의 설명이 정확합니다. 나는 여기에 비슷한 질문에 대답했다 : http : // stackoverflow.com/questions/5558996/where-to-place-the-place-the-entity-framework-in-our-solution/5559032 # 5559032 둘러보기에 대한 링크가 있습니다. –

+0

답변 해 주셔서 감사합니다. – barteloma