0

プロパティをデータベースにマップしようとしています。ただし、固定長がわかっているリスト/配列です。したがって、これらのアイテムを別のデータベース テーブルにマップする必要なく、同じデータベース テーブルにマップしたいと考えています。

public class Recurrency{

    public int Id { get; set; }

    public DateTime BeginDate { get; set; }

    public DateTime EndDate { get; set; }

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

私が現在使用しているブール配列は、曜日と同じ長さであり、DaysOfWeek既に提供されている列挙子を使用してアクセスする必要があります。

これを解決する方法はありますか?

4

2 に答える 2

0

ブール配列を使用する代わりに、列挙型を使用できます。

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を設定するには、ビット単位(|)を使用して日を結合します。

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
}
于 2012-11-20T15:51:23.397 に答える
0

配列はまったくマップできません。長さが固定されている場合は、次のような醜いハックを実行できます。

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

配列のすべてのメンバーにプロパティを提供し、代わりにそれらのプロパティをマップする必要があります。

于 2012-11-20T11:53:03.710 に答える