gpt4 book ai didi

SQLite 网络扩展 : How to get rid of relationship records?

转载 作者:行者123 更新时间:2023-12-02 01:38:36 25 4
gpt4 key购买 nike

假设我有一个像官方示例中那样的多对多关系:

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; }
}

如果我现在要删除一个学生,则中间对象表示的关系记录也不会被删除。 (如果我启用级联删除,Subject 会被删除——这是不应该发生的。)

目前我正在通过使用自定义查询删除记录来手动清理,但是使用 sqlite-net 有更好的方法吗?

最佳答案

您可以将 Subjects 属性设置为 null 或一个空列表,并对学生对象调用 UpdateWithChildren

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

它将更新学生对象及其关系,删除该学生的所有记录,相当于:

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

缺点是,如果您让 SQLite-Net Extensions 处理这种关系,您将在数据库中多执行一个“更新”语句。

关于SQLite 网络扩展 : How to get rid of relationship records?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29698709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com