개발 이야기/ORM2012. 4. 15. 12:38

NHibernate 실전 - CRUD(2)

NHibernate CRUD 두번째 시간입니다이번에는 비지니스 로직을 부분을 어떻게 구현하는지 살펴보겠습니다. CRUD 기본만 잡고가면 그 외 확장기능은 충분히 개발 가능할 것을 확신하기에 기본에 중점을 두고 진행합니다.^^

 

조회 화면

조회하는 뷰페이지에 액션링크에 Shippers Id 키값을 설정해줍니다.

 

            @Html.ActionLink("Edit""Edit"new { id = item.ShipperID }) |

            @Html.ActionLink("Details""Details"new { id = item.ShipperID }) |

            @Html.ActionLink("Delete""Delete"new { id = item.ShipperID })

 

 

 

상세 화면

리스트에서 항목 클릭 시 이동되는 상세 화면을 구성해보겠습니다데이터의 키(id)값을 받아서 해당 데이터를 페이지에 출력하면 됩니다. Id를 인자로 받아서 ISession Get메서드를 사용하여 Shippers의 특정데이터를 조회합니다조회된 데이터는 뷰에 반환하여 페이지를 구성하게 됩니다.

 

        public ActionResult Details(int id)

        {

            ISession session = SessionProvider.Instance.GetSession();

            Shippers shipper = session.Get<Shippers>(id);

 

            return View(shipper);

        }

 

 

위의 Details 메서드가 구성되었다면 상세 뷰를 MVC 스캐폴링 옵션을 사용하여 페이지를 생성 해보겠습니다메서드에서 마우스 오른쪽을 클릭하여 뷰 추가를 선택하세요.

20_01.JPG

[그림 20-1] Controller 추가

 

화면에 매칭할 Model을 선택하고 스캐폴링 옵션에 Details로 선택합니다.

20_02.JPG

[그림 20-2] View 추가

 

추가를 하면 Detail이라는 뷰가 자동으로 생기며 뷰 코드를 보면 자동으로 데이터 상세 값이 출력되도록 구성된다실행 해보겠습니다.

20_03.JPG

[그림 20-3] 상세 화면

 

신규생성

뷰 구성은 위에 스캐폴링을 이용해서 생성해주시면 됩니다그 부분은 생략하고 실제 로직을 살펴보겠습니다데이터 추가하는 메서드입니다. Shippers 객체를 받아서 바로 처리합니다.

 

        [HttpPost]

        public ActionResult Create(Shippers shipper)

        {

            ISession session = SessionProvider.Instance.GetSession();

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Save(shipper);

                session.Flush();

                trans.Commit();

                return RedirectToAction("Index");

            }

            catch

            {

                trans.Rollback();

                return View();

            }

        }

 

 

NHibernate는 자체 Transaction 처리가 가능합니다. ITransaction 객체를 사용하시면 됩니다데이터를 수정하거나 추가삭제처럼 데이터 변경이 발생하는 경우는 데이터베이스와 동기화를 위해 ISession.Flush()를 반드시 호출해줘야 합니다.

 

 

수정

다음은 수정입니다신규생성과 마찬가지로 Shippers 객체를 인자로 받아옵니다. ISession의 Merge메서드를 통해서 데이터 수정이 처리됩니다.

 

        [HttpPost]

        public ActionResult Edit(Shippers shipper)

        {

            ISession session = SessionProvider.Instance.GetSession();

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Merge(shipper);

                session.Flush();

                trans.Commit();

            }

            catch

            {

                trans.Rollback();

            }

            return RedirectToAction("Index");

        }

 

 

 

삭제

마지막으로 데이터 삭제입니다. Shippers 테이블은 ShipperID Identity로 가지고 있기때문에 id를 인자로 받아와서 처리합니다.처리 후에 리스트화면으로 이동합니다데이터 삭제 시에는 ISession의 Delete 메서드를 이용합니다.

 

        public ActionResult Delete(int id)

        {

            ISession session = SessionProvider.Instance.GetSession();

            Shippers shipper = session.Get<Shippers>(id);

 

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Delete(shipper);

                session.Flush();

                trans.Commit();

                return RedirectToAction("Index");

            }

            catch

            {

                trans.Rollback();

                return View();

            }

        }

 

 

실제로 화면 하나하나 캡처하면 내용이 길어져서 소스코드면 소개를 해드렸습니다소스를 첨부해드릴테니 받아서 한번씩 실행해보면 더 쉽게 이해되시리라 생각합니다. NHibernate는 견고하고 데이터 처리에 필요한 기본적인 기능들을 제공하고 있습니다. (트랜잭션 처리같은… ) Table과 Object의 매핑이라는 점이 핵심이라고 볼 수 있겠네요이렇게 잛게 기본적인 NHibernate 활용편을 살펴보았습니다읽어주셔서 감사합니다.^^

 

소스코드 : NHibernateDemo.zip



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

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



Posted by 사나에