我正在工作瓦特/一箇舊數據庫設置
愚蠢
分別由一個字符id列和兩個字符列構成一個日期和時間組成的索引。我爲日期和時間列創建了一個ICompositeUserType
,以映射到我的實體上的一個.NET DateTime
屬性,該屬性在不是ID的一部分時自行工作。我需要以某種方式使用具有關鍵屬性映射的複合ID,其中包括我的ICompositeUserType
,以映射到兩個字符日期和時間列。顯然瓦特/我的版本功能NHibernate的,CompositeIdentityPart
沒有一個CustomTypeIs()
方法,所以我不能只是做我重寫以下:如何使用Fluent NHibernate將複合標識映射到複合用戶類型?
mapping.UseCompositeId()
.WithKeyProperty(x => x.Id, CommonDatabaseFieldNames.Id)
.WithKeyProperty(x => x.FileCreationDateTime)
.CustomTypeIs<FileCreationDateTimeType>();
是這樣的,甚至可能瓦特/ NHibernate的更不用說流利?我一直無法找到任何這方面的信息。
UPDATE:
更加仔細閱讀NHibernate的documentation後,我發現NHibernate的不支持component composite IDs,但它並不像它支持自定義類型(即IUserType
和ICompositeUserType
)複合的ID。此外,我的Fluent版本不支持NHibernate對組件ID的支持(請參閱issue 387和issue 346)。我可能會嘗試升級我的整個解決方案,看看它是否有效,併發佈一個答案,如果它的確如此......除非有人能告訴我沒有我必須這樣做...... 8o)
不幸的是,我根本無法修改數據庫。如果取決於我,我們會完全重新設計這個東西。那麼你的代碼示例依賴於你所建議的視圖,還是可以在沒有視圖的情況下完成? – gabe 2010-04-04 22:41:03
沒有看法。對它進行實驗,有時最好的方法是瞭解如果可以用Fluent來完成某些事情,那就是下載源代碼並查看單元測試。雖然,我認爲你應該將每一列映射到自己的領域,並提供結合它們的附加屬性。 – 2010-04-05 02:45:13
檢查UTs的好主意。 關於在使用icompositeusertype的映射中組合字段的好處是,我不必在我的域對象中包含遺留的數據庫數據訪問格式轉換,它應該只包含業務邏輯。我對數據訪問翻譯和POCO類業務邏輯有着分離的關注。如果可以的話,我試圖保持這種抽象。我不能將此標記爲答案,因爲CompositeIdentityPart不包含Columns屬性。我需要將FileCreationDateTime分解爲組合鍵/ ID。 – gabe 2010-04-05 14:02:50