使用Entity Framework在C#中映射固定的有限数组

时间:2012-11-20 10:34:37

标签: .net arrays entity-framework dayofweek

我正在尝试将属性映射到数据库。但是它是一个列表/数组,我知道它的固定长度。所以我希望将这些项映射到同一个数据库表中,而不需要映射到不同的数据库表。

public class Recurrency{

    public int Id { get; set; }

    public DateTime BeginDate { get; set; }

    public DateTime EndDate { get; set; }

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

我目前使用的布尔数组与星期几一样长,应使用已提供的DaysOfWeek枚举器进行访问。

解决这个问题的方法有哪些?

2 个答案:

答案 0 :(得分:0)

根本无法映射数组。如果你有固定的长度,你可以做一些丑陋的黑客,如:

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

您需要为数组的每个成员提供属性,然后映射这些属性。

答案 1 :(得分: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将存储为整数。该整数将映射到一周中每一天的真/假。

例如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
}