콘솔앱(.net core) 새 프로젝트를 만든 후 Microsoft.EntityFrameworkCore.SqlServer를 설치한다.
Databases 우클릭 후 MyDB라는 이름의 새 데이터베이스를 만들어 준 후 속성의 Connection string에 있는 문자열을 복사해서 코드의 public const string ConnectionString 변수에 붙여넣는다.
Data Source : 어떤 데이터베이스에 연결할 것인지 정해준다.
Initial Catalog : 데이터베이스 이름
그 외 몇가지 정보들이 필요하다.
class AppDbContext : DbContext
{
// EF Core 작동 스텝
// 1) DbContext 만들때 DbSet<T>을 찾는다.
// 2) 모델링 class 분석 후 컬럼을 찾는다.
// 3) 모델링 class에서 참조하는 다른 class가 있으면, 그것도 분석
// 4) OnModelCreating 함수 호출 (추가 설정하고 싶으면 override)
// 5) 데이터베이스 전체 모델링 구조를 내부 메모리에 들고 있어서 빠르게 처리가능
// Item이라는 DB 테이블이 있는데, 세부적인 칼럼/키 정보는 Item 클래스를 참고하라
public DbSet<Item> items { get; set; } // 데이터 긁어오는 용
// 어떤 DB를 어떻게 연결해라라는 것을 string에 (각종 설정, Authorization 등)
public const string ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=MyDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; // 외부 파일에 넣어두는게 안전
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
options.UseSqlServer(ConnectionString);
}
}
// 클래스 이름 = 테이블 이름 = Item
[Table("Item")] // 테이블 이름 여기서 지정 가능. 지정 안하면 AppDbContext에서 items 변수 이름으로 생성됨
public class Item
{
public int ItemId { get; set; }
public int TemplateId { get; set; } // 101 = 집행검
public DateTime CreateDate { get; set; }
// 다른 클래스 참조 -> 외부키(foreign key/navigational property)
// OwnerId와 Owner와 한세트
public int OwnerId { get; set; } // 이 부분 주석처리하고 실행하면 OwnerPlayerId로 DB에 자동 생성
public Player Owner { get; set; }
}
public class Player
{
// 클래스이름Id : 관례
public int PlayerId { get; set; } // primary key
public string Name { get; set; }
}
class Program
{
// 초기화 시간이 걸림
static void InitializeDB(bool forceReset = false)
{
using (AppDbContext db = new AppDbContext())
{
if(!forceReset && (db.GetService<IDatabaseCreator>() as RelationalDatabaseCreator).Exists()) // DB가 만들어져 있는가
return;
db.Database.EnsureDeleted(); // 싹 다 밀어버린 후
db.Database.EnsureCreated(); // 새로운 마음으로
Console.WriteLine("DB Initialized!");
}
}
static void Main(string[] args)
{
InitializeDB(forceReset: true);
}
}
코드를 작성하고 실행을 하게되면 사진과 같이 코드 내용대로 DB column과 key가 생성된 것을 확인할 수 있다.