【问题标题】:How to delete a relationship from many to many table in sqlite-net extension?如何在 sqlite-net 扩展中从多对多表中删除关系?
【发布时间】:2014-10-16 19:31:11
【问题描述】:

我使用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。我可以获取一个学生的所有课程,删除一个课程,然后将其与他的课程一起保存,但可能会出现性能问题。

如何删除多对多关系中的关系?谢谢。

【问题讨论】:

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


    【解决方案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。

    查看集成测试项目以了解其工作原理。

    【讨论】:

    • 感谢@redent84。我认为如果调用GetWithChildren(),添加子项然后再次保存它们应该会有性能问题?
    • 好吧,如果是这样的话,你是对的。加载所有元素只是为了删除其中一个是没有意义的。也许我可以在 API 中为此添加一个方便的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多