2013-04-16 102 views
0

我剛開始玩弄流利NHibernate,並希望得到一些關於如何映射這個幫助/指針。這裏是我正在使用的域模型:NHibernate:覆蓋自動映射的一對多關係

類用戶:你的標準的用戶級

類偏好:一組鍵值對。用戶可以有許多偏好。

班級職位:爲簡潔起見,省略完整描述,但用戶創建職位並可包含一個或多個首選項。

因此,要回顧:

class User 
{ 
    IList<Preference> Preferences; 
    IList<Post> Posts; 
} 

class Post 
{ 
    IList<Preference> PostData; 
} 

休眠automapper想出了以下DB結構:

User 
------------------------ 
User_Id 

Preference 
------------------------ 
Preference_Id | User_Id | Post_Id 

Post 
------------------------ 
Post_Id | User_Id 

偏好表看起來醜陋給我,寧願有類似:

User 
------------------------ 
User_Id 

Preference 
------------------------ 
Preference_Id | User_Id 

Post 
------------------------ 
Post_Id | User_Id | Preference_Id 

如何做到這一點的任何幫助是非常讚賞ED!我已經有了一個實現IAutoMappingOverride接口的類,但我不確定如何執行實際的映射。

感謝,
Teja公司

+0

Post表中的Preference_Id是什麼?你說一個帖子有很多首選項。 'Post.Preferences'也包含與'User.Preferences'相同的元素嗎? – Firo

+0

是的.. Post.Preferences始終包含來自User.Preferences的數據。 –

回答

1

我將引用此配置,讓你手動和自動映射正確配置:
Mixing Mixing Automapping and manual mapping

我也注意到你有兩個自己的喜好和後桌的一些組合鍵我會研究如何映射組合鍵。這裏是一個鏈接,可以幫助你與映射組合鍵(有多個列的主鍵):
Using Fluent NHibernate to map Composite Keys

至於你流暢的地圖去下面可能讓你在正確的方向,你可以映射one-to-many同時使用HasManyReferences這取決於你想要的外鍵的表關係:

public class UserMap : ClassMap<User> 
{ 
    public UserMap(){ 
     Id(x => x.Id).Column("User_Id").GeneratedBy.Identity(); 
     HasMany(x => x.Preferences); 
    } 
} 
public class PostMap: ClassMap<Post> 
{ 
    public UserMap(){ 
     Id(x => x.Id).Column("Post_Id").GeneratedBy.Identity(); 
     References(x => x.Preferences); 
    } 
} 
0

因爲喜好是相同的一個簡單的屬性就足夠了

class Post 
{ 
    public virtual User User { get; set; } 
    public virtual IList<Preference> Preferences { get { return User.Preferences; } } 
}