EntityFramework Core (DotNet에서 Persistence storage 를 관리 하는 일반적인 방법)

 EntityFramework Core

Dotnet 에서는 Database 를 관리 하는 일반적인 방법으로 EntityFrameworks core 가 있다.

EF Core는 다음과 같은 O/RM(개체 관계형 매퍼)으로 사용될 수 있다.

  • .NET 개발자가 .NET 개체를 사용하여 데이터베이스로 작업할 수 있도록 한다.
  • 개발자가 일반적으로 작성해야 하는 대부분의 데이터 액세스 코드가 필요하지 않다.

지원하는 Database 는 링크를 참조하자.



설치

1. mssql 에 대한 DB 공급자 설치
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

2. EF 관련도구 설치
dotnet tool install --global dotnet-ef
 ** 업데이트가 필요하다면 dotnet tool update 명령을 사용한다. **
dotnet tool update --global dotnet-ef

3. EF design 패키지 설치
dotnet add package Microsoft.EntityFrameworkCore.Design

패키지 설치시 오류가 발생하면
Solution Explorer -> 프로젝트 선택 --> Dependencies --> packages 를 마우스 오른쪽 버튼클릭 context menu 에서 Manage nuget packages 선택

Microsoft.EntityFrameworkCore.Design

검색 후 설치 하자 






**항상 런타임 패키지의 주 버전에 부합하는 도구 패키지 버전을 사용하자.**


Context 추가 및 Model 추가
1. Infrastructure folder 추가
2. MyDbContext.cs 추가
public class MyDbContext:DbContext
{
    public MyDbContext()
    {

    }

    protected MyDbContext(DbContextOptions options) : base(options)
    {
    }

    public MyDbContext(DbContextOptions<MyDbContext> options)
        : base(options)
    {
    }

    public virtual DbSet<User> Users { get; set; }
}

3. Models folder 추가
4. User.cs 추가
public class User
{
    public string Id { get; set; } = string.Empty;
    public string Name { get; set; } = string.Empty;
    public string Email { get; set; } = string.Empty;
}

5. DbSchema mapping

MyDbContext.cs 에 다음 추가

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasAnnotation("Relational:Collation", "SQL_Latin1_General_CP1_CI_AS");

    modelBuilder.Entity<User>(entity =>
    {
        // Table 이름은 User 로 한다. 
        entity.ToTable("User");
        
        // Primary key 는 Id 이다.
        entity.HasKey(e => e.Id);

        // Id 는 필수 값이다.
        // Id 는 varchar 형태로 20 length 이다. 
        entity.Property(e => e.Id)
            .IsRequired()
            .IsUnicode(false)
            .HasMaxLength(20);

        // Name 은 256 length 를 갖는 nvarchar 형태이다.
        entity.Property(e => e.Name)
            .HasMaxLength(256);

        // Email 은 256 length 를 갖는 nvarchar 형태이다.
        entity.Property(e => e.Email)
            .HasMaxLength(256);

    });
 }


5. AddDbContext

Program.cs 에 다음 추가

builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connectionString));

6. appsettings.json  에 다음 추가

"ConnectionStrings": {
  "DbServer": "Server=(localdb)\\mssqllocaldb;Database=EFCoreTest;Trusted_Connection=True;"
}

7. 개발자 명령 프롬프트 실행

migration

dotnet ef migrations add InitialCreate --context MyDbContext 
--output-dir Migrations/MySqlMigrations 
--project ScrutorTest 
--startup-project ScrutorTest

database update

dotnet ef database update --context MyDbContext 
--project ScrutorTest 
--startup-project ScrutorTest


--project 에 project 명 기입
--startup-project 에 appsettings.json 이 존재하는 project 기입 해당 정보를 통해 db 연결


8. SQL Server 확인




다음 시간에는 
EF core 의 ORM 을 이용한 Linq Query 생성을 확인해 보겠습니다. 

관련영상

댓글

이 블로그의 인기 게시물

Mediator

ASPNET 6 Web Api Basic Tutorial 1 / 2 (Swagger, SeriLog, MediatR, EntityFrameworkCore, Scrutor)

Dependency Injection Customization