2

我对 Fluent NHibernate 相当陌生。我想知道是否有人会引导我走向正确的方向。

我有一个 WorkDay 类,它代表一周中的每一天。

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

我正在添加一个新表Holidays,它存储了全年的所有假期。

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

我创建了一个假期类:

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);
   }

正确参考和映射工作日中的假期以检查特定日期是否为假期的最佳方法是什么?

谢谢你的建议。

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

但这总是必须加载 HolyDay,因为 NH 必须知道 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 回答