2013-03-21 96 views
0

实体“schoolyear”具有可配置的可视周日,这些日期可见或不在时间计划器中。如何在数据库中保存没有实体的对象

我现在看到2个posibilites来保存可见的星期几。

无论是我做的N:M关系: ñ学年具有M VisibleWeekDays

或者我把可见周天以逗号分隔领域: “0,2,5”

数字是DayOfWeek枚举的枚举值。

我是否真的应该创建另一个2表(交汇点+ VisibleWeekDay表),以在一个字段中保存一天的索引?

如何保存可见的星期几?

回答

5

数据库字段中的逗号分隔会伤害我的感受。考虑一个位掩码:

[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(); 
+0

有趣,我也想过比特种类面具和一个XML字段...你如何存储和查询星期日,星期一和星期五从DayOfWeek,这将是非常有益的,以获得整个我数据包络分析! – Elisabeth 2013-03-21 20:40:31

+0

@Elisa我已经添加了更新的示例,并选择使用实体并使用SQL进行选择。 – 2013-03-21 20:45:57

+0

感谢弗莱姆非常好我也upvoted你的解决方案:) – Elisabeth 2013-03-21 20:53:35

相关问题