如何在数据库中保存没有实体的对象

时间:2013-03-21 20:06:47

标签: c# entities value-objects

实体“schoolyear”具有可配置的可见工作日,在时间规划师中可见或不可用。

我现在看到2个posibilites来保存可见的工作日。

我要么建立N:M关系: N schoolyear有M VisibleWeekDays

或者我将可见的周日放在以逗号分隔的字段中: “0,2,5”

这些数字是DayOfWeek枚举中的枚举值。

我真的应该采用这种开销方式创建另外两个表(结点+ VisibleWeekDay表),只是为了在一个字段中保存一天的索引吗?

你如何保存可见的工作日?

1 个答案:

答案 0 :(得分:5)

DB字段中的逗号分离会伤害我的感受。考虑一下位掩码:

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