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 обрабатывать отношения.

Другие вопросы по тегам