2011-01-20 51 views
3

所以,我有兩個表,稱它們爲User和Item。我希望每個用戶都能夠標記任何項目(例如在Google Universe中「凝視」的內容)。現在存儲一個簡單的關係,沒有明確的ID

,從集合論的角度來看,它應該是合理的存儲這個用戶和項目之間的簡單關係。調用這個新的表UserItemFlags。該表應該有兩列;一個是用戶表的外鍵,另一個是外鍵到Item表。如果用戶U標記項目I,則表示該項目在UserItemFlags表中存在行(U, I)。現在

,我用流利,NHibernate的表達這個問題是這樣的:我似乎無法理解與Id映射做。理想情況下,我不會有身份證,因爲沒有比在用戶和物品之間存在或不存在這種關係更多的東西了。這種模式的一個自然結果是,表中不可能有重複的行。這是一個理想的功能。

using FluentNHibernate.Mapping; 

public class UserItemFlagsMapping : ClassMap<UserItemFlags> 
{ 
    public UserItemFlagsMapping() 
    { 
     // Aaaa! I must have an Id! 
     References(x => x.User).Not.Nullable(); 
     References(x => x.Item).Not.Nullable(); 
    } 
} 

我很樂意爲正確的方向指出任何指針,即使他們會要求我放棄這個特定情況下的Fluent。

回答

2

你什麼意思,你沒有一個ID?您的用戶ID和商品ID都有複合ID。


編輯:答案是在此評論:

的ID()方法只是針對單個列主鍵。你想用CompositeId()來代替。如下所示:CompositeId()。KeyReference(x => x.User,「user_id」)。KeyReference(x => x.Item,「item_id」;顯然,如果使用默認約定映射,噸需要的列名。

+0

是的,我同意。但是流利,NHibernate的不同意。我需要調用`Id`法上`類映射<...>`的良好理解。 – 2011-01-21 09:27:46

1

我沒有尚未使用功能NHibernate但與標準的NHibernate我通常不會直接映射表是這樣的。

許多一對多表剛創建集合上關係的兩個側面。 所以,你將有:

User.Items和Item.Users

添加元素添加到集合將創建映射表UserItemFlags內行。

參見: http://marekblotny.blogspot.com/2009/02/fluent-nhbernate-and-collections.html

達維德

+0

啊,夠公平的。但是,我想,以避免在這些類的列表,因爲它沒有我會在所有:(使用數據的方式匹配 – 2011-01-20 11:26:22

相關問題