2012-02-11 78 views
2

我定義主鍵如下:外鍵的表2列主鍵(CompositeId)

CompositeId() 
    .KeyProperty(x => x.Id) 
    .KeyProperty(x => x.Type); 

我已經試過如下:

References(x => x.EntityWith2ColsPK); 

並與失敗:

外鍵(Fk_MyEntity_EntityWith2ColsPK:MyEntities [Fk_EntityWith2ColsPK]))必須具有相同數目的所引用的主鍵列(EntityWith2ColsPKs [Id,Type])

如何從另一個實體引用EntityWith2ColsPK?


更新:

我以下(根據AlfeG的評論)嘗試:

HasMany<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).KeyColumns.Add("Id", "Type").Cascade.All(); 

與失敗:

自定義類型未實現UserCollectionType:EntityWith2ColsPK

但無論如何我不想要一對多的關係,我想要一個1對1的關係。不過,我不能讓他們任何一個工作。

而且,我已經試過:

HasOne<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).PropertyRef(x => x.Id).PropertyRef(x => x.Type); 

哪些失敗:

NHibernate.MappingException:找不到屬性:在實體類型EntityWith2ColsPK

我能做些什麼這真的有用嗎?


我設法達到的分貝東西..不過不失,由於某種原因,我懷疑它的屬性「類型」映射了兩次,因爲我希望它是主鍵的兩部分,一部分外鍵.. 這是我做過什麼:

References(x => x.EntityWith2ColsPK).Columns("EntityWith2ColsPKId", "Type").Formula("Id = :EntityWith2ColsPKId AND Type = :Type"); 

但我收到以下異常:

System.IndexOutOfRangeException:無效的指數8此SqlParameterCollection以計數= 8。

因爲這個實體的映射是一樣的EntityWith2ColsPK:

CompositeId() 
    .KeyProperty(x => x.Id) 
    .KeyProperty(x => ((ILocalizedEntity) x).Language); 

HELP!

+0

它的重複使用問題,像這樣http://stackoverflow.com/questions/4460648/how-to-map-composite-主鍵到外來流利-nhibernate所以你可以通過這個鏈接找到anser – AlfeG 2012-02-11 12:49:13

+0

這並不能解決我的問題:( – 2012-02-11 15:26:01

回答

2

你可以因爲你沒有使用級聯反正您Reference

References(x => x.EntityWith2ColsPK) 
    .Columns(new string[] { "ID", "TYPE" }) 
    .Not.Update() 
    .Not.Insert(); 
+1

非常感謝你,我花了整個週末來研究這個問題,沒有成功..我很積極我嘗試了你給我的東西,同時改變了其他東西,但它失敗了..現在它工作:)再次感謝。 – 2012-02-11 23:14:43

+0

您可能想要將數據庫中的列名(如果可以的話)更改爲id和type之外的其他名稱。例如,在一個名爲'order'的表中,您可能會有一個名爲'order_id'的列。 – 2012-02-12 03:24:37

+0

我遇到了問題...因爲我想要更新和插入「OrderID」,但Type不能再次映射(因爲Type已經是CompositeId的一部分),所以它仍然沒有解決 – 2012-02-12 20:33:12