2017년 5월 26일 금요일

C#, MVC, WebApp : EntityFramework 로 DB 연결 및 조회


참고 : C#, MVC, WebApp : MVC 웹 응용프로그램 생성 및 시작페이지 변경


 무슨 장점이 있는지는 모르겠으나, 요즘은 EntityFramework 로 DB 를 관리하는 경우가 많으니, 그냥 EntityFramework 로 해본다.

일단 "NuGet 패키지 관리" 를 실행.


여기서 "EntityFramework" 를 검색해서 설치한다.


그럼 참조에 "EntityFramework" 관련 항목이 추가된다.
일단 설치는 끝.


 이걸 사용하려면, 일단 폴더를 하나 생성해 주고.


여기서는 "DataContext" 라고 했지만, 아무거나 원하는대로 써도 됨.


여기다 클래슬 하나 추가해 준다.


이름은 적당히 알기 쉬운걸로...


그 클래스에 다른걸 별로 할것 없고, 그 클래스에 "DbContext" 를 상속 받게끔만 해주면 된다.

using System.Data.Entity;

namespace son10001.DataContext
{
    public class DBConnect : DbContext
    {
        public DBConnect() : base()
        {
        }
    }
}

이러면 DB 를 자동으로 연결해 주는데, 그래도 DB 연결 정보는 적어 줘야 접속이 된다.


DB 연결 정보는 "Web.config" 에 "<connectionStrings>" 항목으로 기록해 주면됨.
주의 할점은 <connectionStrings> 의 "name" 을 "DbContext" 클래스 명과 동일하게 지정해 주어야 한다는 것.

  <connectionStrings>
    <add name="DBconnect" connectionString="Data Source=192.168.0.100;Initial Catalog=Solution01;Persist Security Info=True;User ID=sa;Password=0000;" providerName="System.Data.SqlClient" />
  </connectionStrings>



DB 테이블은 이미 만들어 놓은 것을 쓴다.
여기서는 "Users" 테이블을 사용.


일단 테이블을 정의해 주어야 하니, "Models" 폴더에 클래스를 하나 추가해 준다.


이 클래스 명은 사용할 테이블명과 동일하게 주어야 함.



using System;
using System.ComponentModel.DataAnnotations;

namespace son10001.Models
{
    public class Users
    {
        [Key]
        public int UserNo { get; set; }

        [Required]
        public String UserId { get; set; }

        [Required]
        public String UserName { get; set; }

        [Required]
        public String UserPassword { get; set; }
    }
}

그리고 테이블 데이터셋과 동일하게 변수를 선언해 준다.
여기서 [Key] 는 기본키, [Required] 는 필수값. 즉, Not Null 을 의미한다.


using son10001.Models;
using System.Data.Entity;

namespace son10001.DataContext
{
    public class DBConnect : DbContext
    {
        public DBConnect() : base()
        {
        }

        public DbSet<Users> Users { get; set; }

    }
}

이제 테이블 설정을 만들어 놨으니, 이걸 DbContext 에 등록.
이렇게 함으로서 해당 테이블을 사용할 준비는 모두 끝났다.

이제 사용하기만 하면 됨.

이걸 사용하는 샘플.


var list = new List<Users>();
using (var db = new DBConnect())
{
    list = db.Users.ToList();
}

이전에 "Contact" 페이지를 기본 페이지로 지정했으니, 저기에다 데이터를 가져 오는 로직을 한번 추가해 보자.


이렇게 하고 실행하고, 저 지점에 중단점을 지정해서 놓고 가져온 값을 확인해 보면, DB 에서 현재 데이터를 잘 가져 왔음을 볼 수 있다.

참고로, DB Connect String 을 임의의 값으로 지정하는 법.


이렇게 <connectionStrings> 의 "Name" 을 임의의 값으로 지정했거나, <connectionStrings> 값 자체가 여러개 일경우. 즉, 테이트 서버와 운영서버의 연결값을 별도로 지정하여 사용한다던가 할때.... 저 값을 어떻게 지정해 줄수 있느냐? 하면...


그냥 DbContext 에서 base() 에 "name=연결문자열" 로 지정하면 간단히 지정 할 수 있다.
이렇게 하면 굳이 클래스명과 일치하지 않아도 쓸수 있음.