EF Core ν˜„ν™© 뢄석 - slog

EF Core(.NET 8)의 ν˜„ μƒνƒœμ— λŒ€ν•œ μ „λ¬Έκ°€μ˜ 짧은 정리 글을 λ°œκ²¬ν•΄μ„œ κ·Έ λ‚΄μš©μ„ μ •λ¦¬ν•˜λ©΄μ„œ 슬둜그λ₯Ό μž‘μ„±ν•˜κ³  마무리 ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

μ €λŠ” μ „λ¬Έκ°€μ˜ μ••μΆ•λœ λ‚΄μš©μ„ μ„ ν˜Έν•©λ‹ˆλ‹€. λΉ λ₯΄κ²Œ μš”μ μ„ νŒŒμ•…ν•  수 있고 κΆκΈˆν•œ 뢀뢄은 μΆ”κ°€ 쑰사λ₯Ό 톡해 νšλ“ν•  수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μœ„μ˜ 글은 μ €μžμ˜ μ•ž μ „ κΈ€(2022)을 μ°Έκ³ ν•΄μ•Ό λ³€κ²½ 점을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


κΈ°λ³Έ ν‚€ 생성

EF Core의 κΈ°λ³Έ ν‚€ 생성 μ „λž΅

  • ID/μžλ™ 증가 (μ§€μ›ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ)
  • GUID/고유 μ‹λ³„μž (μ§€μ›ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€)
  • μ‹œν€€μŠ€ 기반 (μ§€μ›ν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€)
  • Hi/Lo (SQL Serverμ—λ§Œ ν•΄λ‹Ή)
  • μˆ˜λ™μœΌλ‘œ 할당됨

β†’ λ³€ν™” μ—†μŒ

μ»¬λ ‰μ…˜ μœ ν˜•

  • List<string>λ“± κΈ°λ³Έ μœ ν˜•μ˜ μ»¬λ ‰μ…˜ μ‚¬μš© κ°€λŠ₯

ν…Œμ΄λΈ” 상속 νŒ¨ν„΄

  • TPH, TPT, TPC λͺ¨λ‘ 이제 지원 함

ν‘œν˜„μ‹ μ—΄

  • ν‘œν˜„μ‹ 열을 이제 μ‚¬μš© κ°€λŠ₯ 함

CUD μ—°μ‚° ν‘œν˜„μ‹

  • CUD(생성, μ—…λ°μ΄νŠΈ, μ‚­μ œ) μž‘μ—…μ— μ €μž₯ ν”„λ‘œμ‹œμ € μ‚¬μš© κ°€λŠ₯

κ°•λ ₯ν•œ ν˜•μ‹μ˜ DML μž‘μ—…

  • 이제 μ—…λ°μ΄νŠΈ 및 μ‚­μ œλ₯Ό LINQ μΏΌλ¦¬μ—μ„œ μˆ˜ν–‰ν•  수 있음

수λͺ…μ£ΌκΈ° 이벀트

  • κ΄€λ ¨λœ λ‹€μ–‘ν•œ μ΄λ²€νŠΈκ°€ μΆ”κ°€λ˜μ—ˆμŒ
    • SavingChanges
    • SavedChanges
    • SaveChangesFailed
    • Tracked
    • StateChanged

볡합 μœ ν˜•μ„ μ‚¬μš©ν•˜λŠ” κ°’ 개체


κ΄€λ ¨ν•΄μ„œ 각 λ‚΄μš©μ„ 상세 μΆ”μ ν•˜κ³  μƒ˜ν”Œ μ½”λ“œλ‘œ μž‘μ„±ν•¨

7개의 μ’‹μ•„μš”

볡합 μœ ν˜•μ„ μ‚¬μš©ν•˜λŠ” κ°’ 개체

ν‚€ 값을 가지지 μ•ŠλŠ” Address, Coordinate 같은 개체λ₯Ό μ—”ν„°ν‹°μ—μ„œ μ‚¬μš©ν•  수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν‚€κ°€ μ—†μœΌλ―€λ‘œ Customer 엔터티에 적용될 경우 Customer_City, Customer_PostCode λ“±μœΌλ‘œ 인라인 λ˜μ–΄ 컬럼으둜 적용되게 λ©λ‹ˆλ‹€.
(이후 EF Core λ²„μ „μ—μ„œλŠ” μ—¬λŸ¬ 컬럼으둜 인라인 λ˜μ§€ μ•Šκ³  단일 컬럼으둜 JSON ν˜•νƒœλ‘œ μ €μž₯ ν•  수 μžˆλŠ” κΈ°λŠ₯이 좔가될 μ˜ˆμ •μ΄λΌκ³  ν•©λ‹ˆλ‹€)

2개의 μ’‹μ•„μš”

μ»¬λ ‰μ…˜ μœ ν˜•

이제 κΈ°λ³Έ ν˜•μ‹μ˜ μ»¬λ ‰μ…˜ μœ ν˜•μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ κΈ°λ³Έ ν˜•μ‹μ΄λž€ κ°’μœΌλ‘œ μ·¨κΈ‰λ˜κ³  κ°’ λ³€ν™˜μ„ μ‚¬μš©ν•˜μ—¬ λ§€ν•‘ν•˜λŠ” 방법이 μžˆλŠ” ν˜•μ‹μž…λ‹ˆλ‹€. int, string, DateTime, DateOnly λ“±μž…λ‹ˆλ‹€.

3개의 μ’‹μ•„μš”

EF Core도 dapper 처럼 raw query 지원이 쑰금 κ°•ν™”λ˜μ—ˆμœΌλ©΄ μ’‹κ² μ–΄μš”.

    var name = connection.ExecuteScalar<string>("SELECT Name FROM Customers WHERE CustomerID = @CustomerID;", new { CustomerID = 1});

μ΄λŸ°μ‹μœΌλ‘œ λ°”λ‘œ linq λ“± 없이 바인딩 κ°€λŠ₯ν•˜λ„λ‘β€¦

insert, update도 아직 μ œν•œμ μ΄λΌ

2개의 μ’‹μ•„μš”