개발 이야기/ORM2012.04.15 12:33

Entity Framework – ASP.NET MVC(3)

ASP.NET MVC 세번째 이야기앞에서 목록만 출력하는것을 살펴보았습니다어떤가요굉장히 뭔가 간단하고 재미있지않나요이렇게 엔티티가 바로 바인딩되는 것을 보고 Enterprise 환경에서는 어떨지몰라도 개인적으로 사이트를 만들때 많은 작업들이 간소화되면서 빨리 그리고 가볍게 사이트를 구성할 수 있을듯한 느낌을 받았습니다앞 세션에 이어 이번에는 비지니스 로직 영역과 프로세스를 구체적으로 살펴보겠습니다.

 

List 화면

Shippers 데이터가 목록에 바인딩된 것을 확인 할 수 있습니다코드를 한번 살펴보죠~

11_01.JPG

[그림 11-1] 리스트 화면

 

“NorthwindEntities” 컨텍스트의 Shippers 엔티티를 View에 반환하는 것을 확인 할 수 있습니다화면에서는 뷰 객체를 받아서 처리하여 목록을 출력하고 있습니다구문이 많이 익숙하지 않나요앞에서 저희가 엔티티 작업에 대해서 다뤘던 구문과 거의 비슷합니다.

 

        private NorthwindEntities db = new NorthwindEntities();

 

        public ViewResult Index()

        {

            return View(db.Shippers.ToList());

        }

   

 

 

상세 화면

리스트에서 항목을 클릭하면 상세 화면이 다음과 같이 구성됩니다.

11_02.JPG

[그림 11-2] 상세 화면

 

코드를 보면 인자로 id값을 받고 있습니다유니크한 ShipperID의 값인데요컨트롤러에서는 id값에 해당하는 데이터를 뷰에 반환하고 있습니다뷰에서는 반환된 데이터를 위 화면처럼 뿌려주고 있습니다.

 

        public ViewResult Details(int id)

        {

            Shippers shippers = db.Shippers.Single(s => s.ShipperID == id);

            return View(shippers);

        }

 

 

 

수정 화면

다음은 수정 화면입니다실제로 데이터 변경이 발생하게 되는데요잊지않으셨죠?????

11_03.JPG

[그림 11-3] 수정 화면

데이터가 변경되거나 삭제 등 비지니스 로직이 추가 될 경우에는 SaveChanges 메서드를 꼭 호출해야 데이터베이스에 반영된다는 사실을~~~~ 수정하는 코드도 많이 익숙하군요^^

 

        [HttpPost]

        public ActionResult Edit(Shippers shippers)

        {

            if (ModelState.IsValid)

            {

                db.Shippers.Attach(shippers);

                db.ObjectStateManager.ChangeObjectState(shippers,EntityState.Modified);

                db.SaveChanges();

                return RedirectToAction("Index");

            }

            return View(shippers);

        }

 

 

 

신규생성 화면

다음은 데이터를 생성하는 화면입니다. ShipperID는 자동생성이기에 입력이 안되고 CompanyName Phone값만 입력을 하면됩니다.

11_04.JPG

[그림 11-4] 신규생성 화면

 

코드를 보면 좀 다른것을 확인 할 수 있습니다항목들을 인자로 받는게 아니라 Shippers 객체 자체를 인자로 받고 있습니다그게 가능한 이유는 뷰의 코드를 확인하면 궁금증이 풀립니다.

 

        [HttpPost]

        public ActionResult Create(Shippers shippers)

        {

            if (ModelState.IsValid)

            {

                db.Shippers.AddObject(shippers);

                db.SaveChanges();

                return RedirectToAction("Index"); 

            }

 

            return View(shippers);

        }

       

 

뷰를 구성할때 모델의 객체를 설정해줬습니다하여 바로 뷰에서 Shippers 객체를 인자로 넘겨 줄 수 있었던 것입니다만약 뷰에 모델을 할당하지않는다면 항목을들 하나하나 넘겨서 컨트롤러에서 다시 Shippers 객체에 할당해주는 코드를 작성해야겠지요하지만 그렇게 작업할 이유가 없겠죠??!!! 바로 모델 객체를 뷰와 컨트롤러 사이의 매개변수로 사용이 가능하니깐요!!!

 

        <div class="editor-label">

            @Html.LabelFor(model => model.CompanyName)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.CompanyName)

            @Html.ValidationMessageFor(model => model.CompanyName)

        </div>

 

        <div class="editor-label">

            @Html.LabelFor(model => model.Phone)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.Phone)

            @Html.ValidationMessageFor(model => model.Phone)

        </div>

       

 

 

삭제 화면

마지막으로 삭제화면입니다리스트에서 삭제 링크를 클릭하면 확인을 한번 더 진행합니다이는 프로세스를 어떻게 구성하느냐에 따라 달라집니다우선 스캐폴링 옵션을 이용한 CRUD 화면을 구성하면 기본으로 구성되는 프로세스입니다.

11_05.JPG

[그림 11-5] 삭제 확인 화면

 코드는 다음과 같습니다이또한 SaveChanges를 최종적으로 호출하고 있습니다.

 

        [HttpPostActionName("Delete")]

        public ActionResult DeleteConfirmed(int id)

        {           

            Shippers shippers = db.Shippers.Single(s => s.ShipperID == id);

            db.Shippers.DeleteObject(shippers);

            db.SaveChanges();

            return RedirectToAction("Index");

        }

 

 

어떤가요웹에서 필요한 기본적인 작업을 확인해보았습니다쉽죠?! MVC JQuery를 활용한다면 더 세련되고 화려한 웹페이지 구성을 할 수 있습니다. ASP.NET MVC JQuery는 각자 파트에서 더 상세히 공부하실 수 있습니다이렇게 해서 대작~ Entity Framework – ASP.NET MVC 세션 막을 내립니다감사합니다.



sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/401149

Posted by 사나에