【问题标题】:Fluent NHibernate insert record to many to many relationship databaseFluent NHibernate 向多对多关系数据库插入记录
【发布时间】:2014-05-02 14:55:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

    假设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();
    

    【讨论】:

      猜你喜欢
      • 2011-03-16
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多