2

我想讓流暢的Nhibernate自動映射到沒有指定主鍵或複合鍵的只讀視圖。看起來好像是可能的,因爲ClassMap的API文檔公開了Id()的默認構造函數。使用流暢的NHibernate來映射一個只讀的sql視圖

http://fluentnhibernate.org/api/FluentNHibernate.Mapping/ClassMap%601.htm

它說

IdentityPart ID() 創建一個不具有在域對象的相應屬性,或在數據庫中的列的ID。這主要用於只讀訪問和/或視圖。默認爲帶有「增量」生成器的int標識。

我試着重寫對應於我的視圖的實體的映射,並刪除了指定Id字段名稱的主鍵約定。它添加了一個id列來查看失敗的視圖,因爲沒有這樣的列。

我想擺脫我的看法假主鍵,因爲我認爲應該有更好的方式來做到這一點。

這裏是覆蓋片段我使用

public class PersonMap: IAutoMappingOverride<Person> 
{ 
    public void Override(AutoMapping<Person> mapping) 
    { 
     mapping.Id(); 
    } 
} 

爲什麼不這項工作?

回答

1

解決此問題的方法是通常將任意屬性分配爲id,並通過分配生成id。這與做Map基本相同。

public class ItemViewMap : IAutoMappingOverride<ItemView> 
{ 
    public void Override(AutoMapping<ItemView> mapping) 
    { 
     mapping.Id(x => x.Column).GeneratedBy.Assigned(); 
    } 
} 
+0

這不正是OP不想做的事? – CrazyDart

+0

不,他只是規定他不想有一個假的,無用的主鍵。我建議他使用實際上對他有價值的專欄,並將其作爲ID映射而不是作爲常規屬性。對nhibernate不應該有任何區別,應該讓他解決問題。 – Fourth

+0

由於這些是sql視圖,所以唯一性有時必須由許多屬性確定。爲了實現這一點,您必須建立一個組合鍵,並覆蓋該實體的Equals和GetHashCode方法。我的希望是,我可以繞過建立任何id,因爲它是一個只讀結構。 – user1169684

相關問題