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映射)?或者有更好的方法来做我想在这里做的事情吗?
谢谢。
答案 0 :(得分:2)
我使用
public class UserMap : ClassMap<User>
{
References(m => m.History).Column("HistoryId");
References(m => m.Favourites).Column("FavouritesId");
}
用户
和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 :(得分:1)
这在很多方面都非常基础。
public class UserMap()
{
HasManyTomany(m => m.History).Table("UserHistory");
HasManyTomany(m => m.Favourites).Table("Favourites").AsSet();
}
根据上下文,您应将List<Menu>
更改为相应的界面
ISet<Menu>
(。net4)/ ICollection<Menu>
(。net&lt; 4).AsSet()
IList<Menu>
AsList("indexcolumnName")
,它将自动添加和维护索引列到中间表答案 2 :(得分:-1)
您是否尝试在映射中使用两个单独的表:
this.References(x => x.Favorites).Table("Favorites");
this.References(x => x.History).Table("History");