이번 포스팅에서는 EntityFramework를 통해 localdb에 접속하는 방법에 대해 알아보도록 하겠습니다.
1. locadb에 테이블 생성
1) localdb 위치 확인
보기 => SQL Server 개체 탐색기를 클릭하면 왼쪽 편에 SQL server 개체 탐색기 창이 뜰텐데요.
여기서 SQL Server를 클릭해보면 현재 visual studio에 연결되어 있는 로컬 서버들이 보일것입니다.
2) DB 생성
두 서버 중 원하는 곳에 DB를 생성하면 됩니다.
우선 서버 하위에 있는 데이터베이스 폴더를 마우스 오른쪽 클릭합니다.
새 데이터베이스 추가를 누릅니다.
원하는 이름으로 데이터베이스 이름을 적습니다.
확인을 누르면 정상적으로 DB가 생성됩니다.
3) 테이블 구성 및 생성
DB를 생성했으니 그 안에 테이블을 추가해볼 차례 입니다.
DB하위에 있는 테이블 폴더를 마우스 오른쪽 클릭하고, 새 테이블 추가를 누릅니다.
아래와 같이 테이블을 구성할수 있는 창이 뜹니다.
이곳에서 원하는 컬럼명과 타입을 지정해줍니다. 그리고 null 허용 여부도 결정해줍니다.
참고로 해당 내역을 작성하면 아래 있는 디자인 부분에 그에 상응하는 쿼리문이 자동으로 생성되는 것을 알 수 있습니다.
작성이 완료되면 업데이트를 눌러줍니다.
팝업창이 뜨면 데이터베이스 업데이트 버튼을 눌러줍니다.
완료 후 TestDB아래에 dbo.Table이라는 테이블이 생성된 걸 볼 수 있을겁니다.
여기서 dbo는 디폴트로 붙는 prefix이고 .Table은 디폴트로 생성되는 테이블 명입니다.
테이블명을 Users로 변경하겠습니다.
2. EntityFramework 연결
1) Nuget Pacakage 다운로드
종속성 위에서 마우스 오른쪽을 클릭하고 NuGet 패키지 관리를 클릭합니다.
검색창에 entityframework를 검색한 후, EntityFrameworkCore와 SqlServer를 다운로드 합니다.
2) DbContext를 상속받은 클래스 생성
EntityFramework를 이용한 데이터 관리를 위한 클래스를 생성합니다.
이때 클래스는 DbContext라는 것을 상속받는 형태입니다.
현재 빨간줄이 뜨는건 관련 네임스페이스가 없기 때문인데요.
ctrl+. 을 눌러서 namespace를 추가 해주면 빨간줄이 사라집니다.
이어서 테이블에서 지정한 컬럼명과, 타입이 일치하는 프러퍼티를 가지는 클래스를 생성합니다.
컬럼명이 다르거나 타입이 일치 하지 않으면 오류가 발생하니 주의 하기 바랍니다.
참고로 c#에는 varchar가 없으니 string으로 대체 합니다.
다시 TestDbContext로 돌아와서 앞서 만든 User클래스를 DbSet안에 넣은 형태의 프러퍼티를 정의합니다.
Dbset의 이름은 DB명과 일치하기를 권장합니다.
다음으로 할 부분은 DB와 연결하는 작업입니다.
3) DB와 연결
아래와 같이 config.. 까지 적어주면 자동으로 생성되는 메소드가 보이실텐데요.
해당 부분을 클릭해서 생성해줍니다.
DB와 연결 시켜주기 위해 메소드를 조금 수정해보겠습니다.
UseSqlServer() 메서드가 우리가 사용할 함수 입니다. 해당함수의 인자로는 connectionString 값이 들어갑니다.
우리 DB의 connectionString 은 무엇일까요?
연결한 데이터베이스 마우스 오른쪽 클릭 후 속성을 누르면,
오른쪽 하단에 속성창이 뜹니다.
해당 부분을 복사해서,
인자로 넣어주면 됩니다.
이때 \(백슬래시)가 들어간 부분때문에 에러가 뜰 수 있으니 앞에 @를 추가해줍니다.
이제 Db를 연결할준비가 끝났습니다.
실제로 DB에 있는 데이터를 읽어보겠습니다.
4) DB에 랜덤값 넣기
현재 DB에 데이터가 없기 때문에 임의의 값들을 먼저 채워볼게요.
5) DB값 출력
//Program.cs
TestDbContext를 객체화하고 Dbset의 이름인 Users를 가져와 사용합니다.
그 후 추가적으로 List로 타입 변환을 해주었는데요.
ToList()로 변환을 하지 않아도 가능은 하나, 더욱 확장성 있는 쿼리를 작성하기 위해선 일반적으로 ToList()로 변환한다는것을 참고하기 바랍니다.
output:
아래와 같이 using을 쓰지 않아도 정상작동하지만 메모리 효율성을 위해 위와 같이 using을 감싼 형태로 작성하였습니다.
'c#' 카테고리의 다른 글
[c#] 의존성 주입(dependency Injection) 이란? (2) | 2022.08.10 |
---|---|
[c#] Insert, Update, Delete 하는법 with EntityFramework (0) | 2022.07.21 |
[c#] LINQ First vs Single | FirstOrDefault vs SingleOrDefault 차이 (0) | 2022.07.15 |
[c#] SQL in / not in 기능을 LINQ로 구현 (0) | 2022.07.15 |
[c#] 양수일때 + 넣기 (using String.Format) (0) | 2022.07.14 |
댓글