fluentNhibernate:如何为关系添加额外属性(也称为关系属性)

时间:2013-09-19 14:38:01

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我有两个实体,相册和照片,之间有多对多的关系。一切正常。我想要的是添加一个关系属性,即除了album_id和photo_id之外的映射的额外属性,例如添加照片的日期时间或者说该照片在该相册上是否可见的属性。

public class Photo
{   public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual ICollection<Album> Albums { get; set; }
}

public class Album
{
public virtual int Id {get;set;}
    public virtual string Title {get;set;}
    public virtual ICollection<Photo> Photos { get; set; }
}

目前的映射如下:

public class PhotosMap : ClassMap<Photo>
{
   public PhotosMap()
      {
         Id(x => x.Id);
         Map(x => x.Title); 
         HasManyToMany<Album>(x => x.Albums).Not.LazyLoad().Table("album_photos");               
         Table("photos");
      }
}

public class AlbumsMap : ClassMap<Album>
{
   public AlbumsMap()
     {
         Id(x => x.Id);
         Map(x => x.Title);                
         HasManyToMany<Photo>(x => x.Photos).Inverse().Not.LazyLoad().Table("album_photos");
         Table("album");
     }
 }

2 个答案:

答案 0 :(得分:2)

你做不到。您现在需要显式建模并映射该映射表。

答案 1 :(得分:0)

我有这样的事情:

HasManyToMany<EnterpriseRelation>(x => x.SharedIn)
    .Table("SharedDocs")
    .ChildWhere("State=" + StateId.Accepted) // this filter out all relation that aren't accepted
    .ParentKeyColumn("DocId")
    .ChildKeyColumn("RelationId");

StateId.Accepted是一个常数,所以没问题,但我认为你不能做得更多(有了这个)。