Page History
툴
DB FIRST로 모델만들기
네이밍 규칙변환
- tbl 제거 , 언더바제거 , FirstLeeterUpperCase로 모델 변환
제임스의 DB를 노코딩 개발로 Import수행
Entity모델 자동생성
모델맵핑
Code Block | ||||
---|---|---|---|---|
| ||||
private void CategoryBoardMapping(ModelBuilder modelBuilder) { modelBuilder.Entity<CategoryBoard>().HasNoKey(); modelBuilder.Entity<CategoryBoard>().ToView(@"tbl_Category_Board", @"dbo"); modelBuilder.Entity<CategoryBoard>().Property(x => x.CategoryID).HasColumnName(@"CategoryID").HasColumnType(@"int").ValueGeneratedNever().HasPrecision(10, 0); modelBuilder.Entity<CategoryBoard>().Property(x => x.BoardNo).HasColumnName(@"BoardNo").HasColumnType(@"bigint").ValueGeneratedNever().HasPrecision(19, 0); } |
- 최초 키규칙(프라이머리/외래키)등이 적용된 코드이며~ 이후 DB가 수정되면 Sync를 맞춰줍니다.
- EntityFrameWork를 이용해 Model통해 CUD시 PrimaryKey는 필수입니다. ( 위 와같이 Key가 없을시 Entity 변경불가 ) / Read는 제약상관없이 조회는 가능
Repository
- ORM접근 레파지토리를 통해 개발에서 OOP를 이용하여 DB를 빠르게 이용 ( 사용준비끝)
- 모델은 DTO(POCO)로 정의되어 분리되어있기때문에 , Dapper나 스토어프로시저 기반으로 교체하더라도~ 모델은 그대로 재사용가능
유닛테스트를 통한 개발 가속화
- Repository/Service를 구현하기 전 단계에서 DB Context TEST를 OOP를 통해 할수 있으며
DB 개발을 가속화하는 유닛테스트 샘플
Code Block | ||||
---|---|---|---|---|
| ||||
using GouAPI; using Microsoft.EntityFrameworkCore; using Xunit.Abstractions; namespace GouApiTest.EntityTest { public class GouDbContextTest : XUnitTestBase { private GouDbContext gouDbContext; public GouDbContextTest(ITestOutputHelper output) : base(output) { // DbContextOptions 생성 var options = new DbContextOptionsBuilder<GouDbContext>() .Options; // DI를 통해 GouDbContext 인스턴스 생성 gouDbContext = new GouDbContext(options); } [Fact] public async Task BadgeInsertAreOK() { gouDbContext.BadgeInfos.Add(new BadgeInfo { BadgeImageUrl = "https://www.naver.com", BadgeName = "sam badge", ModAdmin = "sam", ModDate = DateTime.Now, RegDate = DateTime.Now, RegAdmin = "sam", }); await gouDbContext.SaveChangesAsync(); } [Fact] public async Task BadgeSelectAreOK() { var badgeInfos = await gouDbContext.BadgeInfos.ToListAsync(); foreach (var badgeInfo in badgeInfos) { output.WriteLine($"BadgeNo: {badgeInfo.BadgeNo}"); output.WriteLine($"BadgeImageUrl: {badgeInfo.BadgeImageUrl}"); output.WriteLine($"BadgeName: {badgeInfo.BadgeName}"); output.WriteLine($"RegDate: {badgeInfo.RegDate}"); output.WriteLine($"RegAdmin: {badgeInfo.RegAdmin}"); output.WriteLine($"ModDate: {badgeInfo.ModDate}"); output.WriteLine($"ModAdmin: {badgeInfo.ModAdmin}"); } } } } |