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