본문 바로가기
asp.net

[.net] Entity Framework(EF, 엔티티 프레임워크)

by TTTGGG 2024. 11. 12.
728x90
반응형
SMALL

 Entity Framework는 .net 애플리케이션에서 데이터베이스와 상호 작용하기 위한 ORM(Object-Relational Mapping) 프레임워크임. EF를 사용하면 데이터베이스의 테이블을 .net 객체로 매핑하고 SQL을 직접 작성하지 않고도 데이터베이스 작업을 쉽게 수행할 수 있음. EF는 데이터베이스 작업을 추상화하여 생산성을 높이고 코드의 유지보수성을 향상시킴.

 

주요특징

 - ORM 기능 : EF는 데이터베이스의 테이블을 .NET 클래스에 매핑하여 객체 지향적인 방식으로 데이터베이스를 조작할 수 있음

 - LINQ 지원 : LINQ(Language Integrated Query)를 사용하여 데이터베이스 쿼리를 객체 지향적으로 작성할 수 있음

 - 데이터베이스 독립성 : EF는 데이터베이스에 의존하지 않으며, 다양한 데이터베이스 제공자(SQL Server, MySQL, PostgreSQL 등)를 지원함

 - 자동 변경 추적 : EF는 엔터티 객체의 변경 사항을 자동으로 추적하고, SaveChanges()를 호출하면 변경된 내용을 데이터베이스에 저장함

 - 이식성 : EF는 다양한 데이터베이스와 호환되며, 데이터베이스 스키마가 변경되었을 때도 쉽게 대응할 수 있도록 마이그레이션 기능을 제공함

 

EF의 접근 장법

 - Database First : 기존 데이터베이스 스키마를 기반으로 모델을 생성함. 이미 데이터베이스가 존재하는 경우 유용함

 - Code First : 클래스와 코드로부터 데이터베이스 스키마를 정의함. 데이터베이스가 없는 경우 또는 데이터베이스를 처음부터 코드를 기반으로 설계하고 싶은 경우 사용

 - Model First : EDMX(엔터티 데이터 모델) 파일을 사용하여 시작적으로 모델을 디자인 한 후, 데이터베이스를 생성함. 이 방법은 시각적으로 모델을 설계하고자 할 때 유용함

 

장점

 - 생산성 : SQL 쿼리를 직접 작성할 필요 없이 C# 코드로 데이터베이스 작업을 수행할 수 있음

 - 유지보수성 : 데이터베이스 스키마 변경을 추적하고 관리하기 쉬워짐

 - 객체 지향 프로그래밍 :데이터베이스 작업을 C# 객체로 다루기 때문에 객체 지향적인 코드 작성이 가능함

 

단점

 - 복잡한 쿼리 : 매우 복잡한 쿼리를 작성해야 할때는 직접 SQ을 작성하는 것이 더 효율적일 수 있음

 - 성능 : ORM을 사용할 때 성능이 저하될 수 있으며, 성능 최적화를 위한 노력이 필요함

 - 초기 학습 곡선 : EF의 작동 방식과 내부 매커니즘을 이해하는 데 시간이 필요할 수 있음 

 

// Code First Example 
// 클래스 정의
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime EnrollmentDate { get; set; }
}

// DbContext 클래스 생성
public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

// 데이터 삽입 및 조회 
using (var context = new SchoolContext())
{
    // 데이터 삽입
    var student = new Student { Name = "John Doe", EnrollmentDate = DateTime.Now };
    context.Students.Add(student);
    context.SaveChanges();

    // 데이터 조회
    var students = context.Students.ToList();
    foreach (var s in students)
    {
        Console.WriteLine($"Id: {s.Id}, Name: {s.Name}, EnrollmentDate: {s.EnrollmentDate}");
    }
}

// LINQ Example 
using (var context = new SchoolContext())
{
    // 모든 학생 조회
    var allStudents = context.Students.ToList();

    // 특정 조건에 맞는 학생 조회
    var specificStudents = context.Students
                                  .Where(s => s.Name.StartsWith("J"))
                                  .OrderBy(s => s.EnrollmentDate)
                                  .ToList();
}

 

 

728x90
반응형
LIST