0

同様の状況があります。この投稿では削除が機能しますが、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);

挿入と更新中に問題はありません ありがとう

ps私のクラスは異なる名前を持っていますが、問題ではありません.コードは本当に同じです.

4

2 に答える 2

1

Students_Classes クラスに主キーがありません。それが問題だ。

于 2016-02-04T12:44:50.143 に答える
0

カスケード削除では、中間レコードは削除されません。これらのレコードは無害ですが、まったく役に立ちません。手動で削除できます。例えば:

// 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);
于 2016-02-05T10:04:53.410 に答える