2015-04-17 2 views
3

Скажем, у меня есть много-ко-многим, как в официальном образце:Расширения SQLite-Net: как избавиться от записей отношений?

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?

ответ

2

Вы можете установить в null или пустой список имущества Subjects и позвонить по телефону UpdateWithChildren на объект-ученик.

student.Subjects = null; 
conn.UpdateWithChildren(student); 

Это обновит объект студента и его отношения, удалив все записи для этого студента, что эквивалентно:

conn.Execute("DELETE FROM StudentSubject WHERE StudentId = ?", studentId); 

Недостаток состоит в том, что у вас есть еще один «обновление» заявление выполняющегося в базе данных, если вы разрешите SQLite-Net Extensions обрабатывать отношения.

Смежные вопросы