NHibernate - отображение двух коллекций одного типа в базу данных - PullRequest
3 голосов
/ 10 января 2012

Вопрос картографирования NHibernate. У меня есть объект под названием Пользователь и объект под названием Меню. Пользователь содержит две коллекции меню.

public class User 
{
    public List<Menu> History {get; set;}
    public List<Menu> Favourites {get; set;}
}

public class Menu
{
    public string Name {get; set;}
    ...
}

Могу ли я в любом случае, не создавая новую сущность, сгенерировать две таблицы отношений для пользователя и меню (вероятно, UserHistory и UserFavourites ...), каждая из которых содержит отображение из UserIds в MenuIds? Может ли это быть сделано только с отображениями (отображение FluentNHibernate, если это возможно)? Или есть лучший способ сделать то, что я пытаюсь сделать здесь?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Я бы использовал

public class UserMap : ClassMap<User>
{
     References(m => m.History).Column("HistoryId");
     References(m => m.Favourites).Column("FavouritesId");   
}

для пользователей

и подкласс Menu для UserHistory и UserFavourites.

public class MenuMap : ClassMap<Menu>
{
  public ParentMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);

    DiscriminateSubClassesOnColumn("type");
  }
}
public class ChildMap : SubclassMap<Child>
{
  public ChildMap()
  {
    Map(x => x.AnotherProperty);
  }
}
1 голос
/ 16 июля 2012

это довольно простое множество здесь.

public class UserMap()
{
    HasManyTomany(m => m.History).Table("UserHistory");
    HasManyTomany(m => m.Favourites).Table("Favourites").AsSet();
}

В зависимости от контекста вы должны изменить List<Menu> на соответствующий интерфейс

неупорядоченный, но уникальный:

  • ISet<Menu> (.net4) / ICollection<Menu> (.net <4) </li>
  • добавить в hasmanytomany .AsSet()

упорядочено по добавленному:

  • IList<Menu>
  • add to hasmanytomany AsList("indexcolumnName"), которая автоматически добавит и поддержит столбец индекса в промежуточных таблицах
0 голосов
/ 10 января 2012

Вы пытались использовать две отдельные таблицы в своих сопоставлениях:

this.References(x => x.Favorites).Table("Favorites");
this.References(x => x.History).Table("History");
...