0

を使用して、学生とクラスの間に多対多の関係がありますSQLite-net Extensions

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
{
    [ForeignKey(typeof(Students))]
    public int StudentFId { get; set; }

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

この方法で関係を追加します。

dbConnection.InsertOrReplace(new Students_Classes { StudentFId = sId, ClassFId = cId });

しかし、関係を削除したい場合:

var validRelation = dbConnection.Find<Students_Classes>(x => x.StudentFId = sId && x.ClassFId = cId);
if (validRelation == null)
    return;

dbConnection.Delete(validRelation);

というエラーが表示されますcannot delete because it has no PK。すべてのクラスを含む Student を取得し、1 つのクラスを削除して、そのクラスで再度保存できますが、パフォーマンスの問題が発生する可能性があります。

多対多の関係で関係を削除するには? ありがとう。

4

1 に答える 1

1

リレーションシップ クラスに主キーを追加するだけです。

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

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

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

とにかく、SQLite-Net 拡張機能を使用すると、自分で関係テーブルを管理する必要はありません。リストから子項目を追加または削除しUpdateWithChildrenて、オブジェクトを呼び出すだけです。

Integration Tests プロジェクトを見て、その仕組みを確認してください。

于 2014-10-16T21:35:18.960 に答える