- 쿼리문을 직접 작성 -> 값을 처리
- Logging
- 쿼리문 직접 작성 -> 오류발생 소지가 높다.
- Database DBA(데이터베이스 관리자)
- 설계완료, 물리적 데이터베이스도 모두 완성된 상태
- database 기준으로 application 개발
- 규모가 있는 회사들이 사용
- 설계, 성능 등을 고려해야하기 때문에
- ex) MyBatis
- 소규모 개발, 기술에 민감한 사람이 사용
- 성능향상은 나중에 생각하는 방식
- 역으로 Code -> DB 생성해서 Application 개발
- ORM 공부를 많이해야 한다.
- ex) Hibernate
1. 프레임워크 업그레이드 ASP.NET MVC Core 1.1
2. EntityFramework Core 설치
3. Model Class -> DbContext 생성 -> Table 생성할 수 있는 코드를 작성.
4. DbContext -> 실제 테이블을 생성
nuget package 에서
EntityFrameworkCore, EntityFrameworkCore.SqlServer, EntityFrameworkCore.Tools 를 설치
세개 다 2.26 버전으로 패키지를 다운받았다.
/* User */
public class User
{
[Key] // PK 설정
public int UserNo{ get; set; } //사용자 번호(PK)
[Required] // Not Null 설정
public string UserName{ get; set; } //사용자 이름
[Required]
public string UserId{ get; set; } // 사용자 ID
[Required]
public string UserPassword { get; set;} // 사용자 Password
}
}
/* Note */
public class Note
{
[Key]
public int NoteNo{ get; set; } // 게시물 번호(PK)
[Required] // Not Null 설정
public string NoteTitle{ get; set; } // 게시물 제목
[Required]
public string NoteContents{ get; set; } //게시물 내용
[Required]
public int UserNo { get; set;} // 작성자(숫자 - 사용자 번호)
[ForeignKey("UserNo")] // User 테이블 UserNo를 외래키로 설정한다.
public virtual User User{ get; set; }
}
}
외래키 참조할때 virtual을 안 써도 결과는 같지만 EntityFramework 자체에서는 쓰는걸 권장한다. virtual을 사용시 Lazy loading(지연로딩)과 관련이 있지만 자세한건 나중에 설명한다.
Lazy loading(지연로딩) : 페이지를 읽어들이는 시점에 중요하지 않은 리소스 로딩을 추 후에 하는 기술
public class AspnetNoteDbContext : DbContext
{
public DbSet<User> Users{ get; set; } // 테이블 생성하는 코드
public DbSet<Note> Notes { get; set; }
/* DB와 연결하는 커넥션 */
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UserSqlServer(@"Server=myServerAddress;Database=myDataBase;User Id=MyUsername;Password=myPassword;");
}
}
}
Package Manager Console 에서
add-migration "파일이름" : DB 명령어 만들기
update-database: 만들어진 명령어로 데이터베이스 만들기
DB를 생성하기위해서는 마이그레이션 과정을 거쳐야 한다.
마이그레이션 로그가 남아서 이전 DB로 업데이트 할 수 있다는 장점이 있다.