保存实体时复制子条目
本文关键字:复制 实体 保存 | 更新日期: 2023-09-27 18:05:42
我在更新实体时得到了子元素的副本。
提交代码:
Report report = _ReportService.GetReport(id);
report.AddDocument(
new Document
{
Extension = qqfile.Substring(qqfile.Length - 3),
Path = g.ToString(),
Type = TypeHelper.GetDocumentType(report.Status),
User = MemberFactory.MemberInfo
}
);
report.Status = (ReportStatus)((int)report.Status + 1);
_reportRepository.SaveOrUpdate(report);
public class Document : BaseModel
{
public virtual string Path { get; set; }
public virtual string Extension { get; set; }
public virtual DocumentType Type { get; set; }
public virtual User User { get; set; }
public virtual Report Report { get; set; }
}
public class DocumentMap : ClassMap<Document>
{
public DocumentMap()
{
Id(x=> x.Id);
Map(x=> x.Extension);
Map(x => x.Path);
Map(x => x.CreateDate);
Map(x => x.LastModified);
Map(x => x.Type).CustomType<int>();
References<User>(x => x.User);
References<Report>(x => x.Report);
}
}
public class Report : BaseModel
{
public virtual Patient Patient { get; set; }
public virtual ReportStatus Status { get; set; }
public virtual DateTime AppointmentStart { get; set; }
public virtual DateTime AppointmentEnd { get; set; }
public virtual ReportType Type { get; set; }
public virtual IList<Document> Documents { get; set; }
public virtual long Kareo_Id { get; set; }
public Report()
{
this.Status = ReportStatus.New;
this.Documents = new List<Document>();
}
public virtual void AddDocument(Document document)
{
document.Report = this;
this.Documents.Add(document);
}
}
public class ReportMap : ClassMap<Report>
{
public ReportMap()
{
Id(x => x.Id);
Map(x => x.CreateDate);
Map(x => x.LastModified);
Map(x => x.AppointmentStart);
Map(x => x.AppointmentEnd);
Map(x => x.Type).CustomType<int>();
Map(x => x.Status).CustomType<int>();
Map(x => x.Kareo_Id);
References<Patient>(x => x.Patient);
HasMany<Document>(x => x.Documents)
.Inverse()
.Cascade.All();
}
}
尝试将AsSet添加到映射
HasMany<Document>(x => x.Documents)
.AsSet()
.Inverse()
.Cascade.All();
您需要将IList更改为ICollection并使用System.Collections.Generic.HashSet初始化它。
问题的原因是,您可能添加相同的文档到列表两次,因为它没有保存,它被插入两次到数据库。
将实体映射作为文档映射:你应该加上
References<User>(x => x.User).Cascade.None();
Cascade.None()将停止级联任何更改。
你也可以使用智能感知给你选项,当你写。cascade .
转速2
这应该适用于两个映射
References(x => x. user).Cascade.None();引用(x =>
x.Report) .Cascade.None ();