07 Entity Framework

vencott·2021년 6월 2일
0

ASP.NET

목록 보기
7/9

Entity Framework(EF)

Entity Framework는 C#과 같은 OOP 언어에서 데이터베이스를 쉽게 사용하기 위한 ORM(Object Relational Mapping) 도구이다

ORM은 OOP의 객체(Obejct)와 관계형(Relational) 데이터베이스의 테이블을 매핑(Mapping)하여 별도의 SQL 쿼리를 작성하지 않아도 쉽게 데이터에 엑세스할 수 있게 해준다

Microsoft가 직접 구현한 ORM 기술로는 Entity Framework와 LINQ TO SQL이 있다

현재 MVC5에서 사용하는 것은 Entity Framework v6.0이다

설치법

Tools -> Nuget Package Manager -> Package Manager Console을 선택하고 다음 명령어를 입력해 EF를 설치한다

PM> Install-Package EntityFramework

설치 여부는 Solution Explorer -> References에서 확인한다

Entity Framework 모델

EF에는 3가지 접근 모델이 있다

  1. Code First
  2. Model First
  3. Database First

이 중 Code First 방식은 데이터 모델을 C# 클래스로 직접 코딩하는 방식으로 추후에도 유일하게 지원될 방식이다

Code First

Code First는 먼저 C# 클래스로 테이블 구조를 정의하는데, 클래스의 속성을 테이블의 컬럼에 매핑한다

DB를 미리 설계하지 않고 C# 클래스들로 Domain Object들을 정의한 뒤 프로그램 실행 시에 DB가 없다면 자동으로 생성하는 방식을 사용한다

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; }
    }
}

GuestDbContext 클래스는 EF의 DbContext 클래스로부터 파생된 클래스로 DBContext의 여러 기능들을 상속받는다

클래스 정의 전에 [Table{테이블명}] Attribute를 통해 DB에서 생성될 테이블명을 명시적으로 지정한 것이다

이와 같이 GuestDbContext와 Guest 클래스가 정의되면 LINQ를 사용하여 SELECT, INSERT등 다양한 함수를 사용할 수 있다

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();

마지막 코드에서 List 타입인 guests변수를 View()의 파라미터로 전달하고 있는데, 이는 모델 객체 전체를 MVC의 View로 넘기는 방법 중 하나이다

@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>
}

출처: http://www.csharpstudy.com/

profile
Backend Developer

0개의 댓글