2012-11-20 3 views
0

속성을 데이터베이스에 매핑하려고합니다. 그러나 그것은 고정 길이를 알고있는 목록/배열입니다. 그래서 나는 다른 데이터베이스 테이블에 매핑 할 필요없이 같은 데이터베이스 테이블에 매핑되는 항목을 원합니다.C#에서 Entity Framework를 사용하여 고정 된 제한 배열에 매핑

public class Recurrency{ 

    public int Id { get; set; } 

    public DateTime BeginDate { get; set; } 

    public DateTime EndDate { get; set; } 

    public Boolean[] IsRecurrent { get; set; } 
} 

내가 현재 사용하고 부울 배열은 요일만큼이며, 이미 제공된 DaysOfWeek 열거를 사용하여 액세스해야합니다.

이 문제를 해결할 수있는 방법은 무엇입니까?

답변

0

부울 배열을 사용하는 대신 enum을 사용할 수 있습니다.

public class Recurrency 
{ 
    public int Id { get; set; } 
    public DateTime BeginDate { get; set; } 
    public DateTime EndDate { get; set; } 
    public DaysOfWeek IsRecurrent { get; set; } 
} 

[Flags] 
public enum DaysOfWeek 
{ 
    Sunday = 1, 
    Monday = 2, 
    Tuesday = 4, 
    Wednesday = 8, 
    Thursday = 16, 
    Friday = 32, 
    Saturday = 64 
} 

데이터베이스에 DaysOfWeek은 정수로 저장됩니다. 이 정수는 요일마다 true/false로 매핑됩니다.

예를 들어 DaysOfWeek == 22는 (월요일, 화요일 및 목요일)입니다. 또는 거짓 (false (1), true (2), true (4), false (8), true (16), false (32), false (64))의 배열로 생각하면

IsRecurrent를 설정하려면 bitwise (|)를 사용하여 요일을 결합 할 수 있습니다.

var recurrency = new Recurrency(); 
recurrency.IsRecurrent = DaysOfWeek.Monday | DaysOfWeek.Friday; 

그런 다음 값을 쿼리하기 위해 HasFlag 메서드를 사용할 수 있습니다.

var recurrency = db.Recurrencies.Find(1); 
if (recurrency.IsRecurrent.HasFlag(DaysOfWeek.Monday | DaysOfWeek.Sunday) 
{ 
    // do something 
} 
0

배열을 전혀 매핑 할 수 없습니다. 당신이 길이를 수정 한 경우 같은 못생긴 해킹을 수행 할 수 있습니다

internal bool FirstIsRecurrent { 
    get { return IsRecurrent[0]; } 
    set { IsRecurrent[0] = value; } 
} 

당신은 배열의 모든 구성원에 대한 속성을 제공하는 대신 이러한 속성을 매핑해야합니다.