【问题标题】:Fluent NHibernate Mapping ReferenceFluent NHibernate 映射参考
【发布时间】:2013-02-11 21:47:24
【问题描述】:

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

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

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

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

创建表 [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);
   }

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

感谢您的建议。

【问题讨论】:

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


    【解决方案1】:

    选项 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 是否存在才能使属性无效或创建代理

    【讨论】:

    • 非常感谢!我必须弄清楚这些选项中的哪一个最适合我需要做的事情。最美好的祝愿!
    【解决方案2】:

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

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

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

    【讨论】:

    • 这是一个时间表系统。记录每个用户的每个工作日,存储工作时间、福利等。
    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2012-04-03
    相关资源
    最近更新 更多