3

NHibernate 映射问题。我有一个名为 User 的实体和一个名为 Menu 的实体。用户包含两个菜单集合。

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

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

无论如何我可以在不创建新实体的情况下为 User 和 Menu 生成两个关系表(可能是 UserHistory 和 UserFavourites ...),每个关系表都包含从 UserIds 到 MenuIds 的映射?是否可以仅使用映射来完成(如果可能,FluentNHibernate 映射)?还是有更好的方法来做我在这里想做的事情?

谢谢你。

4

3 回答 3

2

这是相当基本的manytomany。

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)
  • 添加到 hasmanytomany.AsSet()

订购者添加:

  • IList<Menu>
  • 添加到 hasmanytomany AsList("indexcolumnName"),它将自动向中间表添加和维护索引列
于 2012-07-16T09:37:39.107 回答
2

我会用

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

在用户中

以及 UserHistory 和 UserFavourites 的子类 Menu。

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);
  }
}
于 2012-01-10T09:50:09.943 回答
-1

您是否尝试在映射中使用两个单独的表:

this.References(x => x.Favorites).Table("Favorites");
this.References(x => x.History).Table("History");
于 2012-01-10T16:12:47.907 回答