私は多くのソースを含む多くのレポート(1対多)を含むEventという名前のエンティティを持っています。NHibernate - 更新する必要のないエンティティを更新しようとしました
イベントを更新しようとしているときに、カスケード(これは問題ありません)のためにレポートを更新しようとします。 更新しようとしますカスケード(これは問題ありません)のためにレポートのソースは結合テーブルにありますが、なんらかの理由でSourceエンティティを更新しようとしますが、ソースエンティティは更新されません。
public class Event
{
public virtual IList<Report> Reports { get; set; }
public virutal int Id { get; set; }
public Event()
{
Reports = new List<Report>();
}
}
public class EventMapping : ClassMap<Event>
{
public EventMapping()
{
Table("EVENTS");
Id(x => x.Id).Column("ID").GeneratedBy.Sequence("EVENT_ID_SEQ");
HasMany(x => x.Reports).KeyCoulmn("EVENT_ID").Cascade.SaveUpdate();
}
}
public class Report
{
public virtual int Id { get; set; }
public virtual int Status { get; set; }
public virtual IList<Source> Sources { get; set; }
public Report()
{
Sources = new List<Source>();
}
}
public class ReportMapping : ClassMap<Report>
{
public ReportMapping()
{
Table("REPORTS");
Id(x => x.Id).Column("ID").GeneratedBy.Sequence("DIVUACH_ID_SEQ");
Map(x => x.Status).Column("Status");
HasManyToMany(x => x.Sources).Table("SOURCES_IN_REPORT").ParentKeyColumn("REPORT_ID").ChildKeyColumn("KOD_SOURCE").Cascade.All();
}
}
public class Source
{
public virtual int Id { get; set; }
}
public class SourceMapping : ClassMap<Source>
{
public SourceMapping()
{
Table("SOURCE");
Id(x => x.Id).Column("ID");
}
}
ここで私はそれが失敗したときです。
var eventFromDb = _session.Get<Event>(eventId);
eventFromDb.Reports.ToList().ForEach(x => x.Status = GetStatus());
_session.Update(eventFromDb);
'Source'にはさらにフィールドがありますか? –