RedPlus 개인 블로그

시삽: 레드플러스 님 
게시판 이동:
 제목 : [코드샘플] ASP.NET MVC 2 + ADO.NET Entity Framework Insert, Select, Update, Delete 사용 코드 샘플
글번호: 171
작성자: Administrator ( 레드플러스 / redplus@live.com )
작성일: 2010/06/19 오전 3:59:00 (2010/06/19 오전 3:59:00 수정)
조회수: 4186

 

아래 코드는

ASP.NET MVC 2를 활용하여 기본형 게시판 작성시 사용한

BasicController.cs 파일의 전체 코드를 샘플로 기록해 놓은 자료입니다.

ASP.NET MVC 2에서 ADO.NET Entity Framework를 사용하여,

입력, 출력, 상세, 수정, 삭제, 검색의 처리를 하는 응용 프로그램 작성시

참고하시면 좋을 듯 합니다.

아래 코드 샘플로 만들어진 데모 사이트는 아래 경로에서 확인하실 수 있습니다.

http://demo.VisualAcademy.com/MvcBasic/

 



using System;
using System.Linq;
using System.Web.Mvc;
using MvcBasic.Areas.Board.Helpers;
using MvcBasic.Areas.Board.Models;

namespace MvcBasic.Areas.Board.Controllers
{
    public class BasicController : Controller
    {
        // Basic 모델 접근 개체 생성
        BasicContext context = new BasicContext();


        // 기본 출력 형태 : 리스트
        // GET: /Board/Basic/
        // GET: /Board/Basic/Index
        // GET: /Board/Basic/?page=0 식으로 출력
        // /Board/Basic/Page/0 식으로 표현하려면, Global.asax 파일을 건드려 함...
        public ActionResult Index(int? page)
        {
            #region [1] 리스트 기본 출력
            ////[1] 리스트 기본 출력
            //// 리스트 출력 : 번호에 따라서 내림차순 정렬해서 List<Basic> 형태로 출력
            //var list = context.Basics.OrderByDescending(b => b.Num).ToList();
            //return View(list); 
            #endregion

            #region [2] 수작업으로 페이징 처리
            ////[2] 수작업으로 페이징 처리
            //const int pageSize = 10; // 한 페이지에 최근글 10개만 출력
            //var list = context.Basics.OrderByDescending(b => b.Num)
            //    .Skip((page??0) * pageSize) // 앞에서 몇개를 건너뛰기할건지???
            //    .Take(pageSize) // 몇개를 취할건지???
            //    .ToList();
            //return View(list); // Basic 테이블 형태의 리스트 값이 전달 
            #endregion

            //[3] 페이징 UI를 만들기
            const int pageSize = 10; // 한 페이지에 최근글 10개만 출력
            var list = context.Basics.OrderByDescending(b => b.Num);
            var pagedList = new PaginatedList<Basic>(list, (page ?? 0), pageSize);
            return View(pagedList); // Basic 테이블 리스트 + 전체 페이지/현재 페이지 
        }



        //
        // GET: /Board/Basic/Details/5
        // 게시물 상세 보기
        public ActionResult Details(int id)
        {
            // 넘겨온 id(Num)에 대한 단일 레코드 조회
            //var view = context.Basics.Where(b => b.Num == id).First();
            var view = context.Basics.Where(b => b.Num == id).SingleOrDefault();

            if (view == null)
            {
                return View("NotFound"); // 뷰 추가 : Ctrl+M, Ctrl+V
            }
            else
            {
                // 조회수 증가 로직 추가
                view.ReadCount++; // 조회수 증가
                context.SaveChanges(); // 모델 업데이트

                return View(view); // 조회된 데이터 전달
            }
        }



        //
        // GET: /Board/Basic/Create
        // 기본적인 입력 폼이 보여지는 상태
        public ActionResult Create()
        {
            ViewData["Title"] = "게시판 글쓰기";
            GetEncoding();

            return View();
        }

        private void GetEncoding()
        {
            SelectList sl = new SelectList(new string[] { "Text""HTML""Mixed" });
            ViewData["Encoding"] = sl;
        } 

        //
        // POST: /Board/Basic/Create
        // Create 페이지에서 submit 버튼 클릭시 여기로 폼의 값이 전달
        [HttpPost]
        [ValidateInput(false)] // Page 지시문에 validateRequest="false"와 동일
        public ActionResult Create(FormCollection collection)
        {
            ViewData["Title"] = "게시판 글쓰기";
            GetEncoding();

            // Basic 클래스형 개체 생성
            Basic insert = new Basic();

            // 유효성 검사 로직을 추가
            // 간단한 유효성 검사 : http://www.asp.net/mvc/tutorials/performing-simple-validation-cs
            if (Request.Form["Name"].Trim().Length < 1)
            {
                // 에러 출력
                ModelState.AddModelError("Name""이름을 입력하세요...");
                return View(); 
            }

            try
            {
                // 유효성 검사가 통과되었다면 처리
                if (ModelState.IsValid)
                {
                    // TODO: Add insert logic here
                    UpdateModel(insert); // 입력 폼에 입력된 값을 자동으로 insert 개체에 대입

                    // 수작업으로 입력
                    insert.PostDate = DateTime.Now;
                    insert.PostIP = Request.UserHostAddress; // IP주소
                    insert.ReadCount = 0; // 조회수 0으로 초기화

                    // 모델에 데이터 입력
                    context.Basics.AddObject(insert); // 입력대기
                    context.SaveChanges(); // 대기된 CRUD를 실행

                    return RedirectToAction("Index"); 
                }
                else
                {
                    return View(); 
                }
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /Board/Basic/Edit/5
        // 글 수정하기 페이지 보여주기
        public ActionResult Edit(int id)
        {
            ViewData["Title"] = "글 수정하기";
            GetEncoding();

            Basic edit = (from b in context.Basics
                         where b.Num == id
                         select b).SingleOrDefault();
            return View(edit);
        }

        //
        // POST: /Board/Basic/Edit/5
        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Edit(int id, FormCollection collection)
        {
            ViewData["Title"] = "글 수정하기";
            GetEncoding();
            // 현재 id에 해당하는 엔터티 하나 가져오기
            Basic edit = (from b in context.Basics
                          where b.Num == id
                          select b).SingleOrDefault();
            // 예전에 입력한 암호와 현재 입력한 암호가 맞으면 수정 진행
            if (edit.Password == Request.Form["Password"])
            {
                try
                {
                    // TODO: Add update logic here
                    UpdateModel(edit); // 현재 폼의 값을 한번에 전체 모델 업데이트 

                    // 수정하기 페이지에서 눈에 보여지지 않는 부분 처리
                    edit.ModifyDate = DateTime.Now; // 수정한 날짜
                    edit.ModifyIP = Request.UserHostAddress; // 수정한 IP주소

                    // 업데이트 완료
                    context.SaveChanges();
 
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }
            else
            {
                // 에러메시지 전송
                ModelState.AddModelError("Password""암호가 틀립니다. 다시 입력하세요...");
                // 다시 수정하기 페이지 보여주기
                return View(edit); 
            }
        }

        //
        // GET: /Board/Basic/Delete/5 
        public ActionResult Delete(int id)
        {
            // 기본적으로 보여지는 페이지에 엔터티 전달
            Basic delete = (from b in context.Basics
                            where b.Num == id
                            select b).SingleOrDefault(); 

            return View(delete);
        }

        //
        // POST: /Board/Basic/Delete/5
        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            // 기본적으로 보여지는 페이지에 엔터티 전달
            Basic delete = (from b in context.Basics
                            where b.Num == id
                            select b).SingleOrDefault(); 

            // 내가 수정 또는 삭제하려는 페이지가 없는 경우 체크
            if (delete == null)
            {
                return View("NotFound"); 
            }

            if (delete.Password == Request.Form["Password"])
            {
                try
                {
                    // TODO: Add delete logic here
                    context.DeleteObject(delete); // 삭제 진행
                    context.SaveChanges(); // 업데이트 완료

                    return RedirectToAction("Deleted"); // 리스트 페이지로 바로 이동해도 무관하다...
                }
                catch
                {
                    return View();
                } 
            }
            else
            {
                ModelState.AddModelError("Password"" 암호가 틀립니다. 다시 입력하세요...");
                return View(delete); 
            }
        }


        // 삭제 완료 페이지...
        public ActionResult Deleted()
        {
            return View(); 
        }

        // 검색 결과 리스트 페이지
        public ActionResult Search(string searchField, string searchQuery)
        {
            // 조검에 따른 검색
            if (searchField == "Title"// 제목
            {
                var find = from b in context.Basics
                           where b.Title.Contains(searchQuery) // Title Like '홍길동'
                           select b;
                return View(find); 
            }
            else if (searchField == "Name"// 작성자
            {
                var find = from b in context.Basics
                           where b.Name.Contains(searchQuery) // Name Like '홍길동'
                           select b;
                return View(find); 
            }
            else if (searchField == "Content"// 내용
            {
                var find = from b in context.Basics
                           where b.Content.Contains(searchQuery) // Content Like '홍길동'
                           select b;
                return View(find); 
            }
            else // 전체
            {
                var find = from b in context.Basics
                           where 
                                b.Name.Contains(searchQuery) || 
                                b.Title.Contains(searchQuery) ||
                                b.Content.Contains(searchQuery)
                           select b;
                return View(find); 
            }
        }
    }
}

 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트


관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 Visual Studio 2010 한글판 설치 동영상 - Administrator 2010-06-20 3809
현재글 [코드샘플] ASP.NET MVC 2 + ADO.NET Entity Framework... - Administrator 2010-06-19 4186
다음글 ASP.NET MVC 2 게시판 프로젝트 온라인 강좌 오픈 - Administrator 2010-06-18 4049
관련 페이지 리스트
numtitlenamedateview
388 C 언어에서 값 전달과 참조 전달(Call By Value and Call By Re... Administrator 2023-03-09 3556
387 병합 알고리즘 순서도 2022-10-22 5088
386 C 언어 강의: scanf를 엔터키를 기준으로 여러 행으로 값을 입력 받기 Administrator 2022-01-09 4400
385 C 언어: scanf 사용해서 표준 입력인 콘솔로부터 나이를 정수로 입력 받아 출력 Administrator 2022-01-07 3213
384 Java 코드 샘플 - Function 인터페이스로 람다 식 만들기 Administrator 2022-01-04 3108
383 C# 코드 샘플 - 널 조건부 연산자 사용하기 Administrator 2022-01-02 3147
382 C# 코드 샘플 - 널 병합 연산자와 default 키워드 Administrator 2022-01-02 3059
381 C# 코드 샘플 - 널 병합 연산자로 문자열 변수의 NULL 값 확인하기 Administrator 2022-01-02 2970
380 C# 강의 - 14세 미만 체크 메서드 구현 Administrator 2022-01-01 3025
379 C 언어 천 단위 콤마 찍기 thousands_separator.c Administrator 2021-12-30 4157
378 for 문 순서도 - for 문(for loop) 순서도(flowchart) Administrator 2021-12-28 6868
377 C 언어 코드 샘플 - 전처리기 - 조건부 컴파일 Administrator 2021-12-27 3049
376 C 언어 코드 샘플 - 전처리기 - 매크로 함수 Administrator 2021-12-27 3016
375 http-server 설치하기 - 로컬 루프백 주소로 웹페이지 실행 2021-12-27 3021
374 C 언어 코드 샘플 - N명의 학생의 점수를 입력받아 1차원 배열에 저장 후 총점 구... Administrator 2021-12-27 3076
373 Java 코드 샘플 - 두 수의 합을 구하는 함수 Administrator 2021-12-26 2951
372 C 언어 코드 샘플 - 두 수의 합을 구하는 함수 Administrator 2021-12-26 2994
371 C# 교과서 강좌 - LINQ - Select 확장 메서드에 익명 형식 사용하기 Administrator 2021-12-26 3112
370 C# 교과서 강의 - LINQ - Select 확장 메서드를 사용하여 새로운 형태로 ... Administrator 2021-12-26 3026
369 C 언어 코드 샘플 - static-shared - 정적(공유) 변수 사용하기 Administrator 2021-12-26 3044
 
 
 
손님 사용자 Anonymous (손님)
로그인 Home