본문 바로가기
게임

29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.

by 업무자동화 2016. 2. 10.
반응형

http://ngmaster.mooo.com/ngmaster/xe/index.php?document_srl=4181&mid=STUDY_FRAMEWORK

다음주에 휴가갈 생각을 하니 벌써부터 기분이 좋아집니다. 평창 알펜시아 리조트에 가기로 했는데... 다음주부터 장마가 시작 된다고 하니 걱정이네요. 리조트 근처에 맛집이 어디있는지 좀 알아봐야겠습니다.


EF 관련해서 3번째 글입니다. 매번 글을 쓰면서 느끼지만 말로 강의 하는거랑 글을 적는것은 하늘과 땅 차이인듯합니다. 역시 말로 떠드는게 훨씬 쉬운거 같아요. 사람마다 다르겠지만 저의 경우는 글로 표현하는게 더 어렵게 느껴집니다. 의미 전달도 한계가 있는듯하구요.


이번에는 Designer First에 대해서 알아보고 다음번 강좌 때 예제를 통해 어떻게 사용되는지 알아보도록 할께요.


아래와 같이 "새 항목"을 선택합니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.1.png



"ADO.NET 엔터티 데이터 모델"을 선택한 후 이름을 "NGDatabase"로 지정하고 추가를 클릭하세요.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.2.png



"빈 EF Designer 모델"을 선택하고 마침을 클릭하세요.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.3.png



추가가 되었다면 아래와 같은 화면을 볼 수 있습니다. 지금까지 보아왔던 도구 상자가 아닌 Entity Framework로 되어 있습니다. ASP.NET 또는 WinForm과 같은 컨트롤은 아니지요.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.4.png



디자이너에서 우클릭 후 엔터티를 추가합니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.5.png




엔터티 이름에는 "Student"를 입력하고 엔터티 집합은 "Set" 또는 "s"를 접미사로 붙여줍니다. 사실 아무렇게나 적어도 문제는 발생하지 않습니다만, 가급적이면 복수를 나타낼 수 있는게 좋습니다. Entity Framework에서는 "Set"을 기본값으로 사용합니다. 키 속성은 PK(Primary Key)를 나타내며 기본적으로 ID열을 나타냅니다. MSSQL에서 Identity를 설정하는 것과 같습니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.6.png



학생 엔터티(MSSQL의 Table을 나타내며 매핑이 되지만, 꼭 Table과 같지는 않습니다.)를 생성했으므로 이제 학급 엔터티를 추가합니다. 그리고 학생 및 학급에 속성을 추가하겠습니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.7.png




아직 관계를 맺지는 않았지만 대략 완성된 모습니다. 아래는 과목까지 추가한 모습니다. 사실 더 많은 속성들과 복잡한 테이블 구성이 되어야 하지만 예제이므로 간단하게 구현 되었습니다. 하지만 1:*(일 대 다) 관계와 RDBMS에서는 인정하지 않지만 필요에 의해 만들어지는 *:*(다 대 다) 관계를 알아볼 수 있는 예제입니다. (Subject의 경우는 기준정보성으로 Master 엔터티로 생성하는게 일반적인 설계입니다.)

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.8.png




처음 의도는 선생님 및 여러가지 관계를 더 추가해 보려고 했으나 디비 설계하느라 시간만 보내고 있을거 같기에 포기했습니다-_-; 생각보다 학교 시스템은 복잡합니다. 연간 이수학점 및 출석 일수와 특성화 가산점등등... 이런 모든 것들이 각각의 학교 행사에 맞물려 있다보니 계산이 복잡해집니다. 특히, 이번 메르스와 세월호 같은 사태가 발생되어 휴업이나 휴교를 하게될 경우는 예측하지 못한 상황이므로 자동으로 교육부에 제출하는 연간 수업 계획표를 생성하기가 까다롭죠.


잠깐 이상한데로 빠졌네요. 다시 돌아와서 이번에는 관계를 추가해 봅시다. 도구 상자에서 "연결"을 클릭한 후 각각의 엔터티에서 클릭 후 연결할 다른 엔터티로 드래그합니다. 그러면 아래의 그림처럼 연결되고 기본적으로 1:* 관계를 설정합니다. (상속에 대해서는 잠시후에 알아 볼께요.)

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.9.png



연결을 선택하고 속성을 보면 연결에 대한 설정들을 확인할 수 있습니다. "End1 OnDelete"의 값이 "None"으로 설정되어 있습니다. 이 값을 Cascade로 변경하면 PK가 연결된 FK테이블의 행을 자동으로 삭제하게 됩니다. 하지만, 아래처럼 1:*관계에서 "End2 OnDelete"에도 Cascade로 설정하면 에러가 발생됩니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.10.png





학생과 과목의 경우에는 *:* 관계로 변경합니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.11.png





이제 Database를 생성해야 합니다. 우클릭 후 "모델에서 데이터베이스 생성"을 클릭하세요. 엔터티를 추가할 데이터베이스를 선택합니다.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.12.png



인증한 후 확인을 클릭하세요.

ngmaster-29-3. C# Entity Framework(EF)을 이용한 데이터 지향 개발 방법.13.png

반응형

댓글