[MetadataTypeAttribute] 의 의미
DomainService를 DB를 기반으로 생성해서 보게되면 DomainService 이름.metadata.cs 라는 파일이 생성되는것을 볼수있다. 이곳을 보면 각각의 클래스 마다 [MetadataTypeAttribute] 어트리뷰트가 붙어있는것을 볼 수 있다. 이 어트리뷰가 필요한 이유는 이미 시스템에서 Generate해주는 Entity의 객체(테이블을 클래스로 맵핑시켜준것들)들은 특정 프로퍼티에 대한 수정을 할 수 없다. (partial class를 이용해도 이미 존재하는 프로퍼티에 대한 Attribute등의 추가등의 행동은 불가능하다) 그렇기 때문에 [MetadataTypeAttribute] 라는 어트리뷰트를 통하여 컴파일시에 프로퍼티에 내가 원하는 어트리뷰트를 추가로 달 수 있는 기회를 주는것이다. 고로 내가 만드는 클래스는 이런 메타데이터를 사용할 필요가 없다.(클래스를 만들때 추가해주면 되므로)
RiaService의 편리함을 만들어준 핵심 [Association]
RiaService에서 테이블관의 조인관계를 Association 어트리뷰트를 통하여 정의해준다.
[DataMemberAttribute()]
[Association("cQMA_Children1", "아이디", "부모아이디")]
public EntityCollection<CQMA_Node> Children { get; set; }
[DataMemberAttribute()]
[Association("cQMA_Parent1", "부모아이디", "아이디")]
public CQMA_Node Parent { get; set; }
이렇게 조인관계를 설정해주면 Table을 A.Children. A.Parent ... 이런식의 접근이 가능하고 CRUD Function구성시에 Order와 OderDetail관계에서 Order의 아이디를 알지 못하는 상황에서도 Client에서 Order에 OrderDetail을 여러개 달아 Order를 DomainService에 추가하고 SubmitChange()를 하게되면 자동으로 부모의 ID값을 받아와 추가가 되는등을 적용받을수 있다.
ObjectContext와 Entities와의 차이
공통점
ObjectContext와 Entities 둘다 Select, Update, Delete는 실제 DB에서 처리 한다. 그러므로 ObjectContext에 변경을 가한 후 Entities를 통해 값을 Select해와도 수정이 된 값을 가져오게 된다.
차이점
ObjectContext는 실제 DB에 존재하는 Table구조만 포함된다.
Entities는 실제 DB에 존재하지 않는 Complex Type, StoredProcedure로 만든 Function들이 모두 포함되어 있다.
Invoke되는 함수와 Load되는 함수의 차이
[Key]를 가지고 있지 않는 데이터를 반환한다면
DomainService.GetData().Complated += ...
데이터를 받아올때 InvokeOperation io = sender as InvokeOperation;
[Key]를 가지고 있는 데이터를 반환한다면
DomainService.Load(DomainService.GetDataQuery()).Compated += ...
데이터를 받아올때 LoadOperation lo = sender as LoadOperation;
'SilverLight' 카테고리의 다른 글
많은수의 프로퍼티에 초기값 셋팅으로 ValidationError를 띄워주고 싶을때 (0) | 2011.08.04 |
---|---|
디자인모드 체크 (0) | 2011.06.20 |
[SL]Open되는 페이지에 따라 다른 SL페이지 보여주기 (0) | 2011.06.16 |
[SL] LoadOperation과 InvokeOperation의 차이 (0) | 2011.06.10 |
[SL] Navigation 중첩 (0) | 2011.04.19 |