SqliteNetExtensions 是否可以在调用 InsertOrReplaceWithChildren() 时忽略指定的子项?

SqliteNetExtensions is it possible to ignore a specified child when calling InsertOrReplaceWithChildren()?

我正在用 xamarin 构建一个移动应用程序,它在 classes 之间有很多关系。为简单起见,将其视为具有 class 的 "University" 应用程序:ExamPapers、Students、ExamAnswers。

试卷 class 看起来像这样

public class ExamPapers {
    [ManyToMany(typeof(Student_ExamPaper))]
    public List<Student> Students { get; set; }

    [OneToMany]
    public List<ExamAnswers> Files { get; set; }

    [OneToMany(CascadeOperations = CascadeOperation.All)]
    public List<ExamSection> Sections { get; set; }

    public string ExamName { get; set; }

    [PrimaryKey]
    public string Id { get; set; }
}

所以目前任何 sqlitenetextension 操作(以 "WithChildren" 结尾的操作)都会与所有关系交互,而我通常一次只想与一个关系交互。以下是一些示例场景:

  1. 一名学生 "Lana" 刚刚被授予访问试卷 "Mathematics 101" 的权限。现在要授予她访问权限,我需要加载;所有其他有权访问的学生、考试的所有文件、所有部分。否则,当我调用 "InsertOrReplaceWithChildren" 时,这些关系会被删除。

  2. 我想找出试卷中的第一题。我叫"GetWithChildren(examId)"。我现在有一个包含很多我不想要的信息的对象(例如 300 个学生和 300 个考试答案)。

抱歉,如果我遗漏了文档中的相关内容,但我现在已经通读了几遍。 https://bitbucket.org/twincoders/sqlite-net-extensions

谢谢。

回答标题中的问题:否。你不能。
SQLite-Net-Extensions 没有提供如此灵活的 API 来操作相关数据。

但是在特定情况下可以使用一件有用的东西:

如果结点 tables 有,您可以通过 SQLite-Net 方法(没有 *WithChildren 后缀的方法)像简单的 tables 一样使用结点 tables主键 (Id).
例如,如果您有任何想要在没有额外(相关)数据的情况下获取的数据,只需简单地调用特定 table 上的 Table</*class*/>() 方法,并使用 Where(/*your condition*/) 子句来仅获取您真正需要的数据.然后可以通过Update方法保存修改后的数据。

不幸的是,这个东西不适用于关系 update(例如,如果你想将一个 ExamAnswerExamPaper 移动到另一个 ExamPaper object) 因为所有 SQLite-Net-Extensions 属性继承自 Ignore SQLite-Net 属性,在所有 SQLite-Net 操作中忽略。
但是还有另一种解决方法(有点hacky),您可以指定第二个 class 没有任何 SQLite-Net-Extensions 属性,这为您提供了特定 table.

中的任何字段的 CRUD