티스토리 뷰

반응형

지난번에 이어서 매우 간단한 CRUD 하는 방법을 설명하려고 한다. 최대한 간단하게 하기 위해서 타이틀리 커플드(tightly coupled)로 코딩을 하는 걸로 정했다. 나중에 문의가 들어온다면 MVVM을 적용한 루즐리 커플드(loosely coupled) 방식으로 변경하도록 하겠다.


1. 디자인 변경
화면의 상단에 공간을 좀 주고, 그 곳에 버튼을 3개 배치했다. 버튼의 이름은 Add, Update, Remove이다.


디자인을 변경하면 거의 50%는 한 셈이다. 이제 각 각의 버튼에 약간의 코딩을 하도록 하겠다.


2. CRUD 코딩하기
버튼을 더블클릭해서 이벤트를 만들어보자. Button_Click이란 이름의 이벤트가 하나 만들어지면 그걸 나머지 2개의 버튼에도 같이 붙여버린다. 그리고 코딩을 살짝한다.

using SL4_RIA_Sample.Web;


private void Button_Click(object sender, RoutedEventArgs e)
{
    Button btn = (Button)sender;
    //Order는 DTO(Data Transfer Object)로 WCF RIA에서 자동으로 만들어준 것이다. 이걸 사용하려면

    //SL4_RIA_Sample.Web를 써주기만 하면 된다.           

    Order order;

    switch (btn.Content.ToString())
    {
        case "Add":

            //새로운 레코드를 추가하기 위해서는 그냥 새로운 order를 생성해서 추가한 후에 SubmitChanges()만 호출하면 된다.
            order = new Order();
            orderDomainDataSource.DataView.Add(order);
            break;
        case "Update":

            //SubmitChanges()가 실행되면 Insert, Update, Delete가 모두 적용된다.

            //RejectChanges()는 지금까지 수정된 사항을 모두 취소한다.
            orderDomainDataSource.DomainContext.SubmitChanges();
            break;
        case "Remove":

            //삭제는 단지 DataView에서 삭제하려는 Order를 지우기만 하면 된다.
            if (orderDomainDataSource.DataView.CurrentItem != null)
            {
                order = orderDomainDataSource.DataView.CurrentItem as Order;
                orderDomainDataSource.DataView.Remove(order);
            }
            break;
    }
}

3. 변경된 내용 조회
리플로 문의 주신 내용인데.. 데이터베이스가 내가 변경하지 않고 다른 사람이나 프로시저에서 변경된 경우에 새로 조회를 해도 변경된 내용이 바로 반영이 앙된다는 것인데.. 이것은 LoadBehavior에 대한 처리를 해주면 쉽게 해결 할 수 있다.

WCF RIA Control은 LoadBehavior를 기본적으로 KeepCurrent로 지정되어있다.

LoadBehavior는 데이터를 로드했을때 현재 내가 가지고 있는 데이터와 새로 불러온 데이터를 어떻게 처리 할지를 지정하는 것으로 KeepCurrent(현재 가지고 있는 데이터 유지), MergeIntoCurrent(현재 가지고 있는 데이터를 새로 가지고 온 데이터와 머지), RefreshCurrent(현재 데이터를 새로운 데이터로 몽땅 교체)의 3가지 방법을 제공한다.

이 LoadBehavior를 지정하기 위해서는 몇가지 방법이 있는데, 현재 소스에는 DomainDataSource라는 컨트롤을 사용하고 있고 그 컨트롤에서 지정 방법은 LoadingData 이벤트를 추가하고,

private void orderDomainDataSource_LoadingData(object sender, LoadingDataEventArgs e)
{
    e.LoadBehavior = System.ServiceModel.DomainServices.Client.LoadBehavior.RefreshCurrent;
}

위와 같이 코딩을 해주면 된다.

4. 이번에는 여기 까지만 올리겠다.
추가로 요청이 올라오면 더 자세한 강좌를 올리도록 하겠다.


반응형
댓글