티스토리 뷰

목차

    반응형

    Entity Framework 6.3 예제, 코드 퍼스트와 데이터 퍼스트


    Code First


    - 기존의 데이터베이스가 있든지 없든지 그와 무관하게 테이블과 컬럼에 해당하는 클래스와 속성을 코딩하고 .edmx 파일 없이 코딩한 클래스와 속성을 엔티티 프레임워크에서 사용할 수 있다.


    - 공식적인 이름은 코드 우선이지만 때때로 코드 전용(Code only)이라고 불리기도 한다. 


    - 개념적 모델과 저장 스키마 사이의 맵핑에 해당하는 사용자가 만든 클래스와 속성은 컨벤션(convention)과 특별한 맵핑 API에 의해 다뤄지게 된다. 


    - 만약 데이터베이스를 아직 가지고 있지 않다면 엔티티 프레임워크가 데이터베이스를 자동으로 생성하거나 모델이 변경된 경우 데이터베이스를 제거(Drop)한 후 재생성해준다. 


    - 코드 우선을 위해 개발된 데이터 접근 API는 DbContext 클래스를 기반으로 하고 있다. 


    - 또한 데이터베이스 우선 방식과 모델 우선 워크플로우에서도 사용된다.


    Entity Framework 6.3, 코드 퍼스트[Entity Framework 6.3 예제, 코드 퍼스트와 데이터 퍼스트]


    예제는 방명록을 위한 Guest라는 클래스를 정의하고 있는데, 클래스의 각 속성은 Guest 라는 테이블에 1 대 1로 매핑된다. 


    이렇게 간단한 속성들로 정의되어 외부 Framework에 의존하지 않는 단순한 Entity 클래스를 POCO (Plain Old CLR Object) 클래스라 부르는데, 기본적으로 단순히 데이터를 저장했다 전달하는 역할을 한다.

    Code First 예제

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    using System;
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations.Schema;
     
    namespace GuestBook.Models
    {
        public class GuestDbContext : DbContext
        {
            public GuestDbContext() : base()
            {
            }
     
            public DbSet<Guest> Guests { get; set; }
        }
     
        [Table("Guest")]
        public class Guest
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public DateTime CreateDate { get; set; }
            public string Message { get; set; }
        }
    }
    cs

    13번 라인

    - 예제는 방명록을 위한 Guest라는 클래스를 정의하고 있는데, 클래스의 각 속성은 Guest 라는 테이블에 1 대 1로 매핑된다. 

    - 이렇게 간단한 속성들로 정의되어 외부 Framework에 의존하지 않는 단순한 Entity 클래스를 POCO (Plain Old CLR Object) 클래스라 부르는데, 기본적으로 단순히 데이터를 저장했다 전달하는 역할을 한다.


    7번 라인


    - GuestDbContext 클래스는 EntityFramework (System.Data.Entity)의 DbContext 클래스로부터 파생된 클래스로 DbContext 클래스의 여러 기능을 상속받는다.


    - GuestDbContext 생성자는 Base 클래스의 생성자를 호출하고 있는데 이를 통해 처음 GuestDbContext 객체가 생성되면 (Web.config의 정의에 따라) 기존 DB가 없는 경우 자동으로 DB를 생성하게 된다.


    - Table("Guest")] 는 테이블 명을 명시적으로 지정한 것이다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    // Controller의 Action 메서드들
     
    // Guest 추가
    public ActionResult AddGuest()
    {
        string name = Request["name"];
        string msg = Request["msg"];
     
        var db = new GuestDbContext();
     
        Guest g = new Guest();
        g.Name = name;
        g.CreateDate = DateTime.Now;
        g.Message = msg;
     
        db.Guests.Add(g);
        db.SaveChanges();
     
        return RedirectToAction("ShowGuests");
    }
     
    // Guest 리스트
    public ActionResult ShowGuests()
    {
        var db = new GuestDbContext();
     
        // select top 10 * from guest order by id desc
        List<Guest> guests = db.Guests.OrderByDescending(p => p.Id).Take(10).ToList();
     
        return View(guests);
    }
    cs

    28번 라인

    - Controller에서 Entity Framework을 사용하는 예인데, AddGuest() 메서드에서 데이터를 INSERT 하고 ShowGuests() 에서 최근 10개의 레코드를 출력하고 있다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @model List<GuestBook.Models.Guest>
     
    <h2>Guests</h2>
     
    foreach (var row in Model)
    {
        <p>
            <div>ID: @row.Id, Name: @row.Name</div>
            <div>--- @row.Message</div>
        </p>
    }
    cs

    - List<Guest> 타입인 guests 변수를 View(guests)와 같이 View 메서드의 파라미터로 전달하고 이렇게 넘겨진 모델 객체는 View에서 아래와 같이 @model로 전달된 모델 타입을 지정해 주고 (전체 네임스페이스 써야 함), View에서 Model이라는 속성을 사용하여 해당 모델 객체를 사용한다.


    - 모델 객체가 리스트이므로 foreach에서 Model을 Iteration하여 리스트 요소를 하나씩 꺼내 쓰고 있다.


    Database First

    - 데이터베이스를 이미 가지고 있다면 엔티티 프레임워크가 기존의 데이터베이스 객체(예: 테이블과 컬럼)에 대응되는 클래스와 속성으로 이루어진 데이터 모델을 자동으로 생성해 준다. 

    - 데이터베이스 구조(저장 스키마), 데이터 모델(개념적 모델) 그리고 이 두 모델 간 맵핑에 관한 정보들을 XML 구조로 된 .edmx 파일에 저장한다.

    - 비주얼스튜디오는 .edmx 파일을 보여주고 편집할 수 있는 그래픽 방식의 엔티티 프레임워크 디자이너를 제공해준다.


    Database First 엔티티 프레임워크[Entity Framework 6.3 예제, 코드 퍼스트와 데이터 퍼스트]


    Entity Framework 6.3 예제, 코드 퍼스트와 데이터 퍼스트

    반응형