2013-04-16 7 views
0

Я только начал играть с Fluent NHibernate и хотел бы помочь/указателям на то, как мне удалось сопоставить это. Вот модель предметной области я работаю с:NHibernate: Переопределение автоматов по отношениям от одного к другому

Класс пользователя: Ваш стандартный пользовательский класс

Класс Предпочтение: Набор пар ключ-значение. Пользователь может иметь множество настроек.

Класс Сообщение: Пропущено полное описание для краткости, но пользователь создает сообщение и он может содержать один или несколько предпочтений.

Таким образом, чтобы резюмировать:

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

class Post 
{ 
    IList<Preference> PostData; 
} 

Hibernate automapper придумывает следующие БД Структура:

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 

Любая помощь в том, как это сделать, ред! У меня уже есть класс, который реализует интерфейс IAutoMappingOverride, но я не уверен, как сделать фактическое сопоставление.

Спасибо,
TĒJA

+0

Что такое Preference_Id в Post Post хорошо? Вы сказали, что почта имеет множество настроек. Кроме того, '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 отношения с использованием как HasMany или References в зависимости от какой таблицы вы хотите, внешний ключ:

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; } } 
}