2011-05-25 76 views
2

我有兩個班辦公室和FileDataObject定義爲:功能NHibernate - 一對一的映射 - 更新/刪除

public class Office 
{ 
    public virtual string Name { get; set; } 
    public virtual string Phone { get; set; } 
    public virtual **FileDataObject** OfficePdf { get; set; } 
} 

public class FileDataObject 
{ 
    public virtual int? Id { get; set; } 
    public virtual ContentType ContentType {get;set;} 
    public virtual string FilePath {get;set;} 
} 

與映射定義爲:

public class OfficeMap : ClassMap<Office> 
{ 
    Map(x => x.Name).Not.Nullable(); 
    Map(x => x.Phone).Length(20); 
    References<FileDataObject>(x => x.OfficePdf).Cascade.All().Column("OfficePdfId").Nullable().ForeignKey("FK_Office_FileDataObject"); 
} 

public class FileDataObjectMap : ClassMap<FileDataObject> 
{ 
    Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native(); 
    Map(x => x.ContentType); 
    Map(x => x.FilePath); 
} 

對於一個辦公室,我需要只有一個OfficePdf(FileDataObject),但當沒有爲特定辦公室上傳PDF時,它可能爲NULL。 (so a 0..1 relationship)

上述兩個模式正在正確生成
表:辦公室列:OfficePdfId - >映射 - >表的PK-Id:FileDataObject。

請注意,我不希望Table:FileDataObject具有OfficeId列,因爲FileDataObject也被其他實體使用。

雖然FileDataObject被正確保存,我面對的問題是 -

當用戶更新現有的Office PDF,我很困惑 是否
首先刪除現有FileDataObject,然後創建一個新的或
更新現有的PDF將是一個更好的選擇。

或者有沒有什麼方法FNH可以照顧它?

請您指導。

謝謝!

回答

1

除非您有一些特定的要求,通過刪除和重新創建來滿足,否則只需更新現有的要求即可。您可以決定在您的Office課程中創建或更新,因爲它是FileDataObject的所有者