0

エンティティ「学年」には、タイム プランナーに表示される、または表示されない、構成可能な可視曜日があります。

表示されている曜日を保存する 2 つの可能性があります。

N:M の関係を作成します。N 学年には M VisibleWeekDays があります。

または、カンマ区切りのフィールドに表示される週日を入れます: "0,2,5"

数値は、DayOfWeek 列挙からの列挙値です。

1 つのフィールドに 1 日のインデックスを保持するためだけに、別の 2 つのテーブル (ジャンクション + VisibleWeekDay テーブル) を作成するこのオーバーヘッドの方法を実際に使用する必要がありますか?

その目に見える平日をどのように節約しますか?

4

1 に答える 1

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();
于 2013-03-21T20:11:00.797 に答える