流畅的NHibernate插入记录到多对多关系数据库

时间:2014-05-02 14:55:57

标签: c# nhibernate

我有一个包含三个表的数据库:

FaceT    PhotoT     FacePhotoT
------   ------     ----------
FaceID   PhotoID    FaceID
Name     Name       PhotoID
                    Some additional columns

实际上,由于链接表中的其他列,它的两个一对多关系。无论如何,插入全新的记录工作正常,但问题是,如果我只是想在现有的照片记录中添加新面孔,我想如何进行记录插入?我得到了新面孔名称和现有照片名称,其中存在该面孔以及该怎么做?我无法创建另一个照片记录,因为有这样的文件具有相同的名称上传到服务器(照片表中的名称列是唯一的),我必须以某种方式检查数据库中是否存在照片,如果存在,则创建仅在另外两个表(FaceT和FacePhotoT)中记录,但我不知道如何。

1 个答案:

答案 0 :(得分:0)

假设PhotoT的以下实体和映射:

public class PhotoT
{
    //your entity's other properties here
    public virtual IList<FaceT> Faces { get; set; }

    public PhotoT()
    {
        Faces = new List<FaceT>();
    }
}

public class PhotoTMap : ClassMap<PhotoT>
{
    public PhotoTMap()
    {
        //mapping for other properties here
        HasManyToMany(x => x.Faces)
            .Cascade.SaveUpdate() //or another Cascade option of your choice
            .Inverse() //or Inverse on FaceT
            .Table("FacePhotoT")
            .ParentKeyColumn("PhotoID")
            .ChildKeyColumn("FaceID");
    }
}

您只需将新FaceT添加到现有PhotoT记录的集合中,如下所示:

PhotoT photo = session.Get<PhotoT>(1);
FaceT face = new FaceT();
photo.Faces.Add(face);
session.Update(photo);
tx.Commit();