2012-02-24 3 views
4

의 항목 유형이 인 데이터 모델이 의 하위 집합과 함께 있습니다. 각 항목 유형이벤트의 유효한 세트를가집니다. 이는 ItemEvent 테이블에 제한됩니다. 예를 들어 비디오는 {재생, 정지, 일시 정지}, {이미지의 크기를 재조정, 저장 또는 공유} 할 수 있습니다.컴파일시 엔티티를 모델링하여 데이터 모델 제약 조건을 적용하는 방법은 무엇입니까?

enter image description here

내가 사용하는 이벤트가 특정 항목에 대한 유효한지 시간 보증을 컴파일받을 수 있도록 엔티티 모델이 제약을 반영하는 가장 좋은 방법은 무엇입니까? 이 개발자가 그들이 원하는 어떤의 ItemEvent 문자열에 전달할 수 있습니다 illustrate-- 단지 노력

public void AddItemEventLog(Item item, string ItemEvent) 
{ 
    // 
} 

는 물론, 이것은 인위적인 예입니다 특히, 나는 AddItemEventLog 방법을 리팩토링하고있다. ItemEvent 결과 집합을 기반으로 열거 형을 만들더라도 개발자가 ItemEvent.Resize의 항목을 Video으로 전달하지 못하도록 엔티티 모델에 아무 것도 없습니다.

나는 비디오의 기본 클래스로 Item을 가지고 있으며 열거 형을 재정의하려고 시도했지만 이제 불가능하다는 것을 알았습니다. DB가 FK 위반을 제기 할 때 이미 예외를 던질 것이므로 런타임에 이벤트의 유효성을 검사하는 데 덜 관심이 있습니다.

//enums.cs 
public enum ItemType : byte 
{ 
    Video = 1, 
    Image = 2, 
    Document = 3 
} 

//item.cs 
public class Item : BaseModel 
{ 
    public int ItemId { get; set; } 
    public ItemTypeLookup.ItemType ItemType { get; set; } 
    public string ItemName { get; set; } 
} 

//video.cs 
public class Video : Item 
{ 
    public string Width { get; set; } 
    public string Height { get; set; } 
    public string Thumb { get; set; } 
} 
+0

Entity Framework를 사용하고 있습니까? –

+0

아니요, Entity Framework를 사용하지 않습니다. –

+0

테이블 당 하나의 모델 클래스를 작성하고 있습니까? –

답변

2

내가 Code Contracts 뭔가를 시행 할 수있는 유일한 방법이 될 수 있다고 생각 : 나는

는 현재 수정이 같은 모델 만 공개 수업을 : 가능하면 시간을 코딩에 싹을 따다 할 이것을 컴파일 할 때처럼. 컴파일 시간 외에도 정확한 기능을 보장하는 단위 테스트 작성이 차선책입니다!

관련 문제