SQLite-Net Extensions: как избавиться от записей отношений?
Допустим, у меня есть отношения многие ко многим, как в официальном образце:
public class Student
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
[ManyToMany(typeof(StudentSubject))]
public List<Student> Students { get; set; }
}
public class Subject
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Description { get; set; }
[ManyToMany(typeof(StudentSubject))]
public List<Subject> Subjects { get; set; }
}
public class StudentSubject
{
[ForeignKey(typeof(Student))]
public int StudentId { get; set; }
[ForeignKey(typeof(Subject))]
public int SubjectId { get; set; }
}
Если я сейчас удаляю Студента, запись отношения, представленная промежуточным объектом, тоже не удаляется. (И если я включаю каскадное удаление, субъект удаляется - что не должно происходить.)
В настоящее время я очищаю вручную, удаляя запись с помощью пользовательского запроса, но есть ли лучший способ с sqlite-net?
1 ответ
Вы можете установить на null
или пустой список Subjects
собственность и вызов UpdateWithChildren
на объекте студента.
student.Subjects = null;
conn.UpdateWithChildren(student);
Он обновит объект ученика и его отношения, удалив все записи для этого ученика, что эквивалентно:
conn.Execute("DELETE FROM StudentSubject WHERE StudentId = ?", studentId);
Недостатком является то, что в базе данных выполняется еще один оператор "update", если вы разрешаете SQLite-Net Extensions обрабатывать отношения.