EF Core(Entity Framework Core)는 Microsoft가 제공하는 ORM(Object-Relational Mapping) 프레임워크입니다. EF Core를 사용하면 .NET 개발자가 데이터베이스와 상호 작용하는 애플리케이션을 보다 쉽게 개발할 수 있습니다. 데이터 모델링은 EF Core를 사용하는 데 있어 중요한 부분입니다. 데이터 모델링을 통해 데이터베이스의 구조와 그 데이터베이스에서 사용할 수 있는 작업을 정의할 수 있습니다.
EF Core 데이터 모델링의 주요 개념
엔터티(Entity):
- 설명: 엔터티는 데이터베이스 테이블에 매핑되는 클래스입니다. 각 엔터티 인스턴스는 테이블의 행(row)을 나타냅니다.
- 활용 방법: 엔터티 클래스를 정의하여 데이터베이스 테이블과 매핑합니다. 필요한 속성을 추가하고, 필요시 데이터 주석이나 Fluent API를 사용하여 속성의 제약 조건을 설정할 수 있습니다.
public class Blog
{
public int BlogId { get; set; }
[Required]
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
[Required]
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
DbContext:
- 설명: DbContext는 데이터베이스와의 세션을 관리하며, 엔터티 클래스와 데이터베이스 테이블 간의 매핑을 설정합니다.
- 활용 방법: DbContext 클래스를 정의하고, DbSet<T> 속성을 사용하여 엔터티 집합을 정의합니다. OnConfiguring 메서드를 재정의하여 데이터베이스 연결을 설정합니다.
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
}
}
DbSet:
- 설명: DbSet은 특정 엔터티의 컬렉션을 나타내며, 해당 엔터티에 대한 CRUD(Create, Read, Update, Delete) 작업을 수행하는 데 사용됩니다.
- 활용 방법: DbSet 속성을 통해 데이터베이스 테이블을 쿼리하고 조작할 수 있습니다. LINQ를 사용하여 데이터를 검색하거나 변경할 수 있습니다.
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
context.SaveChanges();
var blogs = context.Blogs.ToList();
}
모델 구성(Model Configuration):
- 설명: 모델 구성은 Fluent API 또는 데이터 주석(Attributes)을 사용하여 수행할 수 있습니다.
- 활용 방법: Fluent API를 사용하여 OnModelCreating 메서드에서 엔터티의 속성을 구성하거나, 엔터티 클래스의 속성에 데이터 주석을 추가하여 속성을 구성할 수 있습니다.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.Property(b => b.Url)
.IsRequired();
}
public class Blog
{
public int BlogId { get; set; }
[Required]
public string Url { get; set; }
}
관계(Relationships):
- 설명: 엔터티 간의 관계는 일대일(One-to-One), 일대다(One-to-Many), 다대다(Many-to-Many) 관계로 나뉩니다.
- 활용 방법: 외래 키를 사용하여 엔터티 간의 관계를 정의합니다. Fluent API 또는 데이터 주석을 사용하여 관계를 설정할 수 있습니다.
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts)
.HasForeignKey(p => p.BlogId);
}
마이그레이션(Migrations)
- 설명: 마이그레이션은 모델의 변경 사항을 데이터베이스 스키마에 적용하는 데 사용됩니다.
- 활용 방법: 패키지 관리자 콘솔 또는 명령줄 인터페이스에서 명령을 실행하여 마이그레이션을 추가하고 데이터베이스를 업데이트합니다.
Add-Migration InitialCreate
Update-Database
이러한 기본 개념과 활용 방법을 통해 EF Core를 사용하여 데이터 모델을 정의하고, 데이터베이스와 상호 작용할 수 있는 애플리케이션을 효율적으로 개발할 수 있습니다.
'공부 > C#' 카테고리의 다른 글
Ation, func란? (1) | 2024.07.14 |
---|---|
protobuf(Protocol Buffers)에 대해 (0) | 2024.07.08 |
Blazor 기본 구성 (0) | 2024.06.28 |
Blazor Server와 Web API (0) | 2024.06.27 |
nullable reference types 기능이란? (0) | 2024.06.26 |