如何使用Nhibernate manytomy添加记录?

如何使用Nhibernate manytomy添加记录?,nhibernate,many-to-many,Nhibernate,Many To Many,我有一个演员和电影班。一个演员可以在很多电影中扮演角色,一部电影可以有很多演员。所以我编写了这些类和映射 class Actor { public Actor() { Movies = new List<Movie>(); } public virtual int ActorId { get; set; } public virtual string ActorName { get; set; } public virt

我有一个演员和电影班。一个演员可以在很多电影中扮演角色,一部电影可以有很多演员。所以我编写了这些类和映射

class Actor
{
    public Actor()
    {
        Movies = new List<Movie>();
    }
    public virtual int ActorId { get; set; }
    public virtual string ActorName { get; set; }
    public virtual IList<Movie> Movies { get; set; }
}


class ActorMap : ClassMap<Actor>
{
    public ActorMap ()
    {
        Id(x => x.ActorId).GeneratedBy.Identity();
        Map(x => x.Name);
        HasManyToMany(x => x.Movies)
            .Cascade.All()
            .Table("ActorMovies");
    }
}


class Movie
{
    public virtual Guid MovieId { get; set; }
    public virtual string MovieName { get; set; }
    public virtual IList<Actor> Actors { get; set; }
}


class MovieMap : ClassMap<Movie>
{
    public MovieMap ()
    {
        Id(x => x.MovieId).GeneratedBy.GuidComb();
        Map(x => x.Name);
        HasManyToMany(x => x.Actors)
            .Cascade.All()
            .Inverse()
            .Table("ActorMovies");
    }
}

您可以尝试以下方法:

  • 创建电影对象

         Movie killBill = new Movie {
            Name = "Kill Bill"
        };
    
  • 创建参与者对象

        Actor umaThurman = new Actor
        {
            Name = "Uma Thurman",
        };
    
  • 在演员对象中,将已创建的电影对象添加到电影中:

        umaThurman.Movies.Add(killBill);
    
  • 在电影对象中,向演员添加已创建的演员对象:

        killBill.Actors.Add(umaThurman);
    
  • 还有下一位演员:

        Actor davidCarradine = new Actor
        {
            Name = "David Carradine",
        };
    
        davidCarradine.Movies.Add(killBill);
        killBill.Actors.Add(davidCarradine);
    
  • 只需使用会话的save方法传递killBill电影对象(保存一次,NHibernate将完成所有操作,它将保存killBill电影对象,您可以通过两种方式关联演员:有演员的电影和有电影的演员):

  • 然后提交: Commit()

  • 注:不要忘记初始化演员和电影类中的列表:

    // Actor Class
    public virtual IList<Movie> Movies { get; set; } = new List<Movie>();
    
    // Movie Class
    public virtual IList<Actor> Actors { get; set; } = new List<Actor>();
    
    //演员类
    公共虚拟列表{get;set;}=new List();
    //电影课
    公共虚拟IList参与者{get;set;}=new List();
    
        Actor davidCarradine = new Actor
        {
            Name = "David Carradine",
        };
    
        davidCarradine.Movies.Add(killBill);
        killBill.Actors.Add(davidCarradine);
    
        session.Save(killBill);
    
    // Actor Class
    public virtual IList<Movie> Movies { get; set; } = new List<Movie>();
    
    // Movie Class
    public virtual IList<Actor> Actors { get; set; } = new List<Actor>();