Home Full Site
Entity Framework : Code First

Entity Framework (EF)에서 Code First 방식으로 DB 스키마를 정의하기 위해 (System.Data.Entity) DbContext 클래스로부터 파생된 새 클래스를 정의한다. 예를 들어, 아래 예제에서 MyDbContext 클래스를 정의하였는데, DB 관점에서 이는 보통 하나의 데이타베이스에 해당한다고 볼 수 있다. (주: 참고로 여러 개의 DbContext 파생클래스가 하나의 DB를 가리키도록 할 수도 있다.)

파생된 DbContext 클래스는 생성자에서 base(문자열) 과 같이 Base 클래스의 생성자를 호출할 수 있는데, 여기서 문자열은 DB Connection String을 가리키거나 혹은 DB 명을 가리킬 수 있다. 아래 예제와 같이 Connection String 포맷이 아닌 경우 단순히 DB 명으로 인식하게 된다. 이때의 base() 문은 MyDB 라는 DB명을 사용하라고 지정하는 것이다. 만약 DB 명을 지정하지 않으면 EF에서 디폴트로 생성한 DB명을 사용하게 되는데, 디폴트명은 MyNamespace.MyDbContext 와 같이 네임스페이스와 클래스명을 조합한 이름이다.

DbContext 클래스의 DbSet은 DB 쪽에서의 테이블에 해당하는 것으로 필요한 만큼의 DbSet<T>들을 지정할 수 있다. 테이블의 컬럼 정의는 DbSet<T>의 타입 T 에 정의되는데, 아래 예제에서는 Customer, Order 클래스가 테이블 구조를 지정하는 것이다. EF Code First에서는 이렇게 지정된 C# 클래스들에 따라 필요한 DB와 테이블들을 생성하게 된다.


예제

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace MyNamespace
{
    public class MyDbContext : DbContext
    {
        public MyDbContext()
            : base("MyDB")
        {
        }

        public DbSet<Customer> Customers { get; set; }
        public DbSet<Order> Orders { get; set; }
    }

    public class Customer
    {
        public Guid Id { get; set; }        
        public DateTime? CreateDate { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public int Age { get; set; }
    }
    
    public class Order
    {
        // 생략...
    }
}



© csharpstudy.com