我有两个表,我正在尝试使用 InsertWithChildren 将记录插入到子表中,不幸的是它没有按预期工作。
public class Schedule
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public DateTime Date { get; set; }
public DateTime ShiftStart { get; set; }
public DateTime ShiftEnd { get; set; }
public string ShiftNotes { get; set; }
public string Company { get; set; }
public string Color { get; set; }
public string Visibility { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<Punches> Punches { get; set; }
}
public class Punches
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[ForeignKey(typeof(Schedule))]
public int ScheduleId { get; set; }
public string Company { get; set; }
public DateTime Date { get; set; }
public DateTime Time { get; set; }
public string Mode { get; set; }
//public TimeSpan Duration { get; set; }
}
这是2张桌子。插入是如何发生的,首先我在 Schedules 表中插入一条记录,然后稍后为该记录添加打孔。我能够将记录插入到 Schedules 表中,然后当我在 schedules 表中添加与该记录相关的打孔时,它只是被覆盖,它不会添加到它。这是我将记录添加到计划表的方式:
Schedule newSchedule = new Schedule()
{
Date = Convert.ToDateTime(tblDate.Text),
ShiftStart = Convert.ToDateTime(btnShiftStart.Content.ToString()),
ShiftEnd = Convert.ToDateTime(btnShiftEnd.Content.ToString()),
ShiftNotes = tbAddNotes.Text,
Company = App.company,
Color = App.color,
Visibility = "Collapsed",
//Punches = new List<Punches>({,
};
App.db.InsertWithChildren(newSchedule, true);
以这种方式进入 Punches 表:
var sch = App.db.Find<Schedule>(s => s.Id == theSelectedShift.Id);
List<Punches> newPunch = new List<Punches>();
newPunch.Add(new Punches()
{
Company = theSelectedShift.Company,
Date = theSelectedShift.Date,
Time = DateTime.Now,
Mode = mode,
});
App.db.InsertAllWithChildren(newPunch);
sch.Punches = newPunch;
App.db.UpdateWithChildren(sch);
这里发生的情况是,它将数据作为 Schedules 表中现有记录的子项插入到 Punches 表中。第二次,当我向 Punches 表添加另一行时,这也是 Schedules 表中同一行的子记录,当我使用 GetWithChildren 方法将其拉起时,我没有看到已添加为子记录的 2 条记录。
请指教!