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

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

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

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

于 2012-11-20T11:53:03.710 回答
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,将是(星期一、星期二和星期四)。或者,如果您将其视为布尔数组(假(1),真(2),真(4),假(8),真(16),假(32),假(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 回答