我正在尝试将属性映射到数据库。但是它是一个列表/数组,我知道它的固定长度。所以我希望将这些项映射到同一个数据库表中,而不需要映射到不同的数据库表。
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 :(得分: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
}