【问题标题】:fully delete a relationship in a many to many table in sqlite-net extension?完全删除sqlite-net扩展中多对多表中的关系?
【发布时间】:2016-02-05 18:04:53
【问题描述】:

我有类似的情况,对此post 删除有效,但仅适用于学生和班级表,在 student_classes 表中的元素不会被删除。

  public class Students
{
    [PrimaryKey, AutoIncrement]
    public int StudentId { get; set; }
    public string Name { get; set; }

    [ManyToMany(typeof(Students_Classes))]
    public List<Classes> Classes { get; set; }
}

public class Classes
{
    [PrimaryKey, AutoIncrement]
    public int ClassId { get; set; }
    public string Name { get; set; }

    [ManyToMany(typeof(Students_Classes))]
    public List<Students> Students { get; set; }
}

public class Students_Classes
{
   [PrimaryKey, AutoIncrement]
    public int StudentClassesId { get; set; }

    [ForeignKey(typeof(Students))]
    public int StudentFId { get; set; }

    [ForeignKey(typeof(Classes))]
    public int ClassFId { get; set; }
}

要删除我使用以下代码

conn.Delete(student, true);

我在插入和更新过程中没有问题 谢谢

附言我的类有不同的名字,但没关系,代码真的是一样的

【问题讨论】:

    标签: c# sqlite sqlite-net sqlite-net-extensions


    【解决方案1】:

    您的 Students_Classes 类中没有主键。这就是问题所在。

    【讨论】:

    • 很抱歉,我当然有,我关注了我链接的帖子中的 cmets,我只是从链接中复制并粘贴,而不是从我的代码中复制和粘贴:/ 谢谢!
    【解决方案2】:

    级联删除doesn't remove intermediate records。这些记录是无害的,但完全没用,您可以手动删除它们。例如:

    // Fetch IDs of intermediate records to delete
    var deleteIds = conn.Table<Student_Classes>()
        .Where(e => e.StudentFId == student.StudentId)
        .Select(e => e.StudentFId).ToList();
    
    // Perform batch deletion
    conn.DeleteAllIds<Student_Classes>(deleteIds);
    

    或更高的性能(但对重构不太友好):

    var deleteQuery = "DELETE FROM Student_Classes WHERE StudentFId == ?";
    conn.Execute(deleteQuery, student.StudentId);
    

    【讨论】:

    • 谢谢!这是我担心的,同时我已经使用了这个“解决方法”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2021-01-07
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多