在 NHibernate 上的多对多关系上添加自定义列

Posted

技术标签:

【中文标题】在 NHibernate 上的多对多关系上添加自定义列【英文标题】:Add custom columns on many to many relationship on NHibernate 【发布时间】:2016-02-24 00:35:17 【问题描述】:

我有一个电影实体和一个演员实体,这两个实体有多对多的关系,所以我将其映射为 ManyToMany(x=>x.Movies)ManyToMany(x=>x.Actors) 但我想要演员扮演的角色这部电影,它应该作为一个新列留在MoviesActorsPivot

但是我怎样才能使用 Fluent Nhibernate 映射以一种我可以像 nhibernate 一样简单地获取和保存数据的方式来做到这一点?

不手动创建数据透视表并在两侧创建HasMany(x => x.MoviesActorsPivot) 并由我自己管理关联。

编辑:

或者,如果我在两侧创建HasMany(x => x.MoviesActorsPivot) 进行映射,我将如何设法插入和获取所有数据,例如来自某个演员的所有电影或所有参与电影表演的演员,获取所有角色名称?

【问题讨论】:

【参考方案1】:

答案是:

NHibernate 原生 many-to-many 映射不支持配对表上的任何附加设置

但是,它可以被替换为第一级公民的配对对象

public class MovieActor 

    public virtual Movie Movie  get; set; 
    public virtual Actor Actor  get; set; 
    ... // more properties here
    public virtual int Rating  get; set; 


public class Actor

    public virtual IList<MovieActor> Movies  get; set; 


public class Movie 

    public virtual IList<MovieActor> Actors  get; set;     

这将是标准的 HasManyReferences 映射。而且后面的查询会更容易

还要检查这些:

Nhibernate: How to represent Many-To-Many relationships with One-to-Many relationships? nhibernate many to many with multiple table many-to-many with extra columns nhibernate

【讨论】:

以上是关于在 NHibernate 上的多对多关系上添加自定义列的主要内容,如果未能解决你的问题,请参考以下文章

用NHibernate处理带属性的多对多关系

Nhibernate:如何用一对多关系表示多对多关系?

与关联对象在同一张表上的多对多关系

父/子表单上的多对多关系限制了数据输入

NHibernate 具有同一类的多对多

Laravel 多列上的多对多同步()