如何在数据库中保存没有实体的对象
问题描述:
实体“schoolyear”具有可配置的可视周日,这些日期可见或不在时间计划器中。如何在数据库中保存没有实体的对象
我现在看到2个posibilites来保存可见的星期几。
无论是我做的N:M关系: ñ学年具有M VisibleWeekDays
或者我把可见周天以逗号分隔领域: “0,2,5”
数字是DayOfWeek枚举的枚举值。
我是否真的应该创建另一个2表(交汇点+ 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查询这对实体:
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();
有趣,我也想过比特种类面具和一个XML字段...你如何存储和查询星期日,星期一和星期五从DayOfWeek,这将是非常有益的,以获得整个我数据包络分析! – Elisabeth 2013-03-21 20:40:31
@Elisa我已经添加了更新的示例,并选择使用实体并使用SQL进行选择。 – 2013-03-21 20:45:57
感谢弗莱姆非常好我也upvoted你的解决方案:) – Elisabeth 2013-03-21 20:53:35