Reputation: 29
I have confused with UpdateWithChildren and InsertOrReplaceWithChildren.
I can't get it work with UpdateWithChildren, but It can work with InsertOrReplaceWithChildren.
so I have deleted the db, then apply InsertOrReplaceWithChildren,
but the problem is that the Id is AutoIncrement, the Id keeps adding on.
Would you give me some advice?
Thanks.
public class WeekHistory {
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public int NoOfDays { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
public List<DayHistory> DayHistories { get; set; } }
public class DayHistory {
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public int Hour { get; set; }
public Action Action { get; set; }
public TimeSpan Duration { get; set; }
[ForeignKey(typeof(WeekHistory))]
public int WeekId { get; set; }
[ManyToOne] // Many to one relationship with WeekHistory
public WeekHistory WeekHistory { get; set; }}
List<DayHistory> newMonday = new List<DayHistory>()
{
new DayHistory() {Hour = 1, Action = Action.Known, Duration = new TimeSpan(0,20,0)},
new DayHistory() {Hour = 1, Action = Action.Unknown, Duration = new TimeSpan(0,40,0)},
new DayHistory() {Hour = 2, Action = Action.Known, Duration = new TimeSpan(0,40,0)},
new DayHistory() {Hour = 2, Action = Action.Unknown, Duration = new TimeSpan(0,20,0)},
new DayHistory() {Hour = 3, Action = Action.Known, Duration = new TimeSpan(0,50,0)},
new DayHistory() {Hour = 3, Action = Action.Unknown, Duration = new TimeSpan(0,10,0)}
};
var mondayHistory = dbConn.GetWithChildren<WeekHistory>(1, true);
//delete the db, instead of the UpdateWithChildren
dbConn.DeleteAll(mondayHistory.DayHistories);
mondayHistory.DayHistories = newMonday;
mondayHistory.NoOfDays += 1;
//it won't update the child
//dbConn.UpdateWithChildren(mondayHistory);
//apply new db with children
dbConn.InsertOrReplaceWithChildren(mondayHistory);
Upvotes: 0
Views: 1493
Reputation: 19239
I don't see the issue with your second sample. You are deleting the previous DayHistory
s and inserting new ones, so the Ids will be different, but nothing to worry about there.
About your first question, UpdateWithChildren
updates registers that already exists in the database. If you call UpdateWithChildren
on the parent object, the children (DayHistory
in this case) won't be inserted into database. Updating the children won't work because you are not assigning any primary key, so the database can't update them either.
Easier solution here is just insert the elements in the database first and then call UpdateWithChildren
to update the foreign keys:
// Delete previous DayHistories to avoid orphaned objects
dbConn.DeleteAll(mondayHistory.DayHistories);
// Assign new elements
mondayHistory.DayHistories = newMonday;
// Insert new elements into database
dbConn.InsertAll(mondayHistory.DayHistories);
// Update parent object to correctly assign foreign keys for the relationships
dbConn.UpdateWithChildren(mondayHistory);
Upvotes: 1