2

我對流利NHibernate相當新。我想知道是否有人會引導我走向正確的方向。流利NHibernate映射參考

我有一個班級WorkDay,它代表了每週的每一天。

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

我加入一個新的表假期,存儲全年所有的節假日。 。

CREATE TABLE [DBO] [假期]([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); 
    } 

什麼是適當參考的最佳方式erence並在工作日中映射假期以檢查特定日期是否爲假期?

謝謝您的建議。

回答

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必須知道,如果宗教節日的存在是爲了空財產或創建一個代理

+0

非常感謝!我必須弄清楚哪些選項最適合我需要做的事情。最好的祝願! – ssokol91 2013-02-12 18:23:32

1

爲什麼不乾脆讓您的假期類店,它適用於日期?

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

爲'工作日'設置單獨的表似乎不值得。你如何使用這些數據?

+0

這是一個時間表系統。每個工作日記錄每個用戶,存儲工作小時數,好處等。 – ssokol91 2013-02-12 16:39:32

+0

好吧,這是有道理的 – cbp 2013-02-13 03:26:20