레이블이 WebApp인 게시물을 표시합니다. 모든 게시물 표시
레이블이 WebApp인 게시물을 표시합니다. 모든 게시물 표시

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=연결문자열" 로 지정하면 간단히 지정 할 수 있다.
이렇게 하면 굳이 클래스명과 일치하지 않아도 쓸수 있음.



2017년 5월 24일 수요일

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


일단 프로젝트를 생성한다.


웹 페이지를 만들 것이므로, 웹 응용 프로그램을 선택.
이름은 적당히 주면 되고...


MVC 로 만들 것이므로 MVC 를 선택.
"비어있음" 을 선택하고 "MVC" 체크 박스를 체크해서 MVC 사이트를 만들수도 있다.
시작을 "MVC" 로 선택하고 하면 기본적인 틀을 미리 잡아 주는 것일뿐...


이렇게 사이트를 생성하고, 사이트를 "실행" 해보면...


요렇게 뭔가 작업하는 화면이 나오고 (VisualStudio 2017 이전 버젼이면 안나옴) ...


이렇게 어느정도 틀이 잡힌 웹페이지가 만들어져 나온다.
만약 "비어있음" 을 선택해서 사이트를 만들었으면, 그냥 빈 페이지가 나올 것이다.

문제는 지금 보이는 페이지가 도대체 어디에 있는 페이지냐는 것.


파일 위치 자체는 "View > Home > index.cshtml" 에 있다.
만약 이걸 다른 파일로 바꾸고 싶으면 어디를 변경해야 할까?


시작 페이지 설정은 "App_Start > RouteConfig.cs" 에 있다.
그 파일에 보면 "routes.MapRoute" 이라는 항목에 "Default" 로 등록되어 있으며, controller = "Home", action = "Index" 로 기록되어 있을 것이다.

즉, 현재 기본 페이지는, "Home" 컨트롤에 "Index" 라는 액션이 기본 페이지로 지정되어 있으며, "Home" 컨트롤은 "Controllers" 폴더에 있으며, 컨트롤명이 "Home" 이 되어 있으니, 클래스 파일은 "HomeController.cs" 가 된다.


"HomeController.cs" 파일을 보면 어러개의 액션이 지정되어 있으며, 시작 페이지 설정에 "Index" 가 지정도어 있으므로, "HomeController.cs" 내의 "Index()" 메소드가 실행되며, 이 메소드에서 View() 를 호출하면 자동으로 "Views > Home > index.cshtml" 파일을 불러 오게 된다.

따라서 시작 페이지를 다른 페이지로 바꾸려면....


예를 들어서 "Index" 를 "Contact" 로 바꾸면, "Views > Home > Contact.cshtml" 를 불러 오게 된다.


그렇게 바꾸고 실행하게 되면, "Contact.cshtml" 페이지가 기본 페이지로 실행이 된다.