2011-05-27 92 views
1

我知道這個問題可能會導致一個主觀的答案,但我想從其他人那裏得到一個意見。在NHibernate中映射隱藏屬性的最佳方式(流利)

一些背景 目前,我有一個公用字符串WKT一個私人字符串屬性映射到一個PostgreSQL(PostGIS的)數據庫表中的幾何列一類。 WKT被PostGIS用於使用觸發器自動更新幾何列。由於我不想在域模型中包含任何空間參考,因此所有查詢均使用WKT字符串和自定義空間標準完成,該空間標準將WKT包裝在空間PostGIS函數中,並查詢專用幾何特性列參考。所有這些按預期工作。

問題 因爲我需要的列引用,我還需要物業在我的DomainModel,對NHibernate的映射到,所以我在想,最好的解決辦法是什麼,對NHibernate的,以從未選擇這個性質。

我目前的解決方案看起來與功能NHibernate如下:

Map(Reveal.Member<LocationReference>("Geometry"), "geometry") 
    .Generated.Always() 
    .ReadOnly() 
    .LazyLoad(); 

這是卓有成效的,當我選擇實體,我不會得到的財產,除非我手動加載它(這ISN」通過lambda擴展可能)。不幸的是,我仍然可以爲該屬性進行Criteria或HQL查詢。

那麼有沒有什麼辦法可以讓我做任何事情來阻止NHibernate能夠做到曾經有過包括select中的列?或者,上述解決方案是在與Query<>QueryOver<>一起選擇時至少忽略列的唯一方法?

+0

我不太瞭解,並您的域名實際使用此LocationReference私有財產?在您的域中使用它有什麼用途? – Vadim 2011-05-27 21:30:32

+0

嗯,我實際上只需要屬性就可以讓NHibernate在執行查詢時意識到它。 NHibernate應該自動映射到正確的列別名,並且正如我寫的那樣,我創建了一個自定義空間標準,該標準使用該屬性的字符串名稱。 – Siewers 2011-05-28 03:59:12

回答

0

那麼,我最終刪除了映射的屬性,因爲即使它很懶,NHibernate有時也會加載它。我所做的實際上有點破綻。我需要來自同一個類的屬性的別名,所以我使用了另一個屬性的映射,並將SqlString分爲'.',以獲取正確的別名。

所有這些對我來說都很合理,「解決方法」並不好,但我沒有看到其他任何方式。 NHibernate需要知道,它處理的是什麼屬性,分配正確的別名。由於我沒有映射該屬性,因此無法知道,我在尋找什麼別名。

我想我做了很多黑客,只是爲了避免引用NHibernate.Spatial ...