NHibernate - 将两个相同类型的集合映射到数据库

发布于 2024-12-26 01:38:02 字数 463 浏览 2 评论 0原文

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 映射)?或者有更好的方法来做我在这里想做的事情吗?

谢谢。

NHibernate mapping question.
I have an entity called User and an entity called Menu. User contains two collections of menus.

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

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

Is there anyway I could, without creating new entity, generate two relationship tables for User and Menu (UserHistory and UserFavourites probably...), each contains mapping from UserIds to MenuIds? Can it be done with mappings only(FluentNHibernate mapping if possible)? Or is there a better way to do what I am trying to do here?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

煮茶煮酒煮时光 2025-01-02 01:38:02

中使用。

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

I'd use

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

in users

and sub class Menu for UserHistory and 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);
  }
}
最笨的告白 2025-01-02 01:38:02

这是相当基本的很多事情。

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

根据上下文,您应该将 List

更改为

无序但唯一的适当接口:

  • ISet
    (.net4) / ICollection

    < /code> (.net < 4)

  • 添加到 hasmanytomany .AsSet()

按添加排序:

  • IList
  • 添加到 hasmanytomany AsList("indexcolumnName") ,它将自动向中间表添加和维护索引列

this is fairly basic manytomany here.

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

Depending on the context you should change List<Menu> to the appropriate interface

unordered but unique:

  • ISet<Menu> (.net4) / ICollection<Menu> (.net < 4)
  • add to hasmanytomany .AsSet()

ordered by added:

  • IList<Menu>
  • add to hasmanytomany AsList("indexcolumnName") which will automaticly add and maintain an index column to the intermediate tables
素手挽清风 2025-01-02 01:38:02

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

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

Have you tried to use two separate tables in your mappings:

this.References(x => x.Favorites).Table("Favorites");
this.References(x => x.History).Table("History");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文