流畅的NHibernate映射参考

时间:2013-02-11 21:47:25

标签: c# fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

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

我有一个WorkDay课程,代表一周中的每一天。

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

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

  

CREATE TABLE [dbo]。[Holidays]([ID] [smalldatetime] NOT NULL,   [描述] 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);
   }

在WorkDay中正确引用和映射假期以检查特定日期是否为假日的最佳方式是什么?

感谢您的建议。

2 个答案:

答案 0 :(得分: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是否存在以使属性为空或创建代理

答案 1 :(得分:1)

为什么不让你的假日班级存储它适用的日期?

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

为“工作日”单独设置表似乎不值得。你是如何使用这些数据的?