2

私は Fluent NHibernate にかなり慣れていません。誰かが私を正しい方向に導いてくれるかどうか疑問に思っていました.

私は、曜日を表す WorkDay クラスを持っています。

 Table("WorkDays");
 Id(x => x.ID).GeneratedBy.Identity();
 Map(x => x.Date);

1 年間のすべての休日を格納する新しいテーブル Holidays を追加しています。

CREATE TABLE [dbo].[Holidays]( [ID] [smalldatetime] NOT NULL, [Description] varchar NULL)

クラス Holidays を作成しました:

public class Holiday: Entity<DateTime>
    {
        public virtual string Description { get; set; }
    }

そしてそれをマッピングしました:

public HolidayMap()
   {
      Table("Holidays");
      Id(x => x.ID).GeneratedBy.Assigned();
      Map(x => x.Description);
   }

特定の日が休日かどうかを確認するために、WorkDay の休日を適切に参照してマッピングする最良の方法は何ですか?

ご提案いただきありがとうございます。

4

2 に答える 2

4

オプション 1: ある日が休日かどうかだけを知りたい場合

public virtual bool IsHolyDay { get; protected set; }

// in WorkDayMap
Map(x => x.IsHolyDay).Formula("(SELECT 1 FROM Holidays h WHERE h.Id = Date)");

オプション 2: Holydays が静的である場合、それをまったくマップせず、すべての HolyDays をメモリに保持して使用する

IDictionary<DateTime, HolyDay> holyDays;

HolyDay holyDay;
if (holyDays.TryGetValue(workDay.Date, out holyDay))
{
    Print(workDay.Date + " is " + holyDay.Description);
}
else
{
    Print(workDay.Date + " is no holyDay");
}

オプション 3: 本当に追加の参照を追加する必要がある場合は可能です

// in WorkDayMap
Reference(x => x.HolyDay, "Date")
    .NotFound.Ignore()  // because not every date is a holyday
    .ReadOnly();        // you already have a property which is responsible for insertion

ただし、NH は、プロパティを無効にするか、プロキシを作成するために、HolyDay が存在するかどうかを知る必要があるため、HolyDay を常にロードする必要があります。

于 2013-02-12T07:45:02.760 に答える
1

ホリデークラスストアを適用する日付にしないのはなぜですか?

public class Holiday
{
    public DateTime Date { get; set; }
    public string Description { get; set; }
    public int Id { get; set; }
}

「就業日」用に別の表を用意する価値はないようです。このデータをどのように使用していますか?

于 2013-02-12T07:53:36.343 に答える