实体“学年”具有可配置的可见工作日,这些工作日在时间计划器中可见或不可见。
我现在看到 2 个可能来保存可见的工作日。
要么我建立一个 N:M 关系:N 个学年有 M 个 VisibleWeekDays
或者我将可见的星期天放在逗号分隔的字段中:“0,2,5”
这些数字是来自 DayOfWeek 枚举的枚举值。
我真的应该采用这种开销方式创建另外 2 个表(junction + VisibleWeekDay 表),只是为了在一个字段中保存一天的索引吗?
您将如何保存可见的工作日?
实体“学年”具有可配置的可见工作日,这些工作日在时间计划器中可见或不可见。
我现在看到 2 个可能来保存可见的工作日。
要么我建立一个 N:M 关系:N 个学年有 M 个 VisibleWeekDays
或者我将可见的星期天放在逗号分隔的字段中:“0,2,5”
这些数字是来自 DayOfWeek 枚举的枚举值。
我真的应该采用这种开销方式创建另外 2 个表(junction + VisibleWeekDay 表),只是为了在一个字段中保存一天的索引吗?
您将如何保存可见的工作日?
数据库字段中的逗号分隔伤害了我的感受。考虑一个位掩码:
[Flags]
public enum DayOfWeek
{
Undefined = 0,
Mon = 1,
Tue = 2,
Wed = 4,
Thu = 8,
Fri = 16,
Sat = 32,
Sun = 64
}
DayOfWeek bitmask = DayOfWeek.Mon | DayOfWeek.Wed | DayOfWeek.Sat;
这样你就可以保持理智和查询能力。
要在 SQL 中查询:
DECLARE @bitmast INT;
SET @bitmask = 64 | 1 | 16; -- sun, mon, fri
SELECT * FROM tbl
WHERE DayOfWeekBitMask & @bitmask = @bitmask;
要使用 LINQ to Entities 进行查询:
int bitmask = DayOfWeek.Sun | DayOfWeek.Mon |DayOfWeek.Fri;
var query = Context.tbl.Where(r => (r.DayOfWeekBitMask & bitmask) == bitmask);
坚持:
int bitmask = DayOfWeek.Sun | DayOfWeek.Mon |DayOfWeek.Fri;
var item = Context.tbl.First();
item.DayOfWeekBitMask = bitmask;
Context.SaveChanges();