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();
}
'asp.net' 카테고리의 다른 글
[.net] SSE(Server-Sent-Event) (0) | 2024.11.29 |
---|---|
[.net] MvcBuildViews 설정, Web.config 충돌 (0) | 2024.11.20 |
[.net] WarmUp(워밍업) (0) | 2024.11.05 |
[.net] Winform에서 OpenGL/OpenTK GLB 파일 렌더링 및 상호작용 (0) | 2024.09.12 |
[.net] Global.asax 기반의 데이터 캐싱 및 테이블 바인딩 처리 (0) | 2024.08.22 |