2014-10-16 4 views
0

나는 학생들과 수업 사이에 많은 관계로 많은 SQLite-net Extensions를 사용했습니다 sqlite-net 확장에서 many to many 테이블 관계를 삭제하는 방법?

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가 표시됩니다. 나는 모든 수업을 듣고 한 반의 학생을 배정하고 한 학급을 제거한 다음 그의 반원들과 함께 다시 저장할 수 있습니다. 그러나 성능 문제가있을 수 있습니다.

여러 관계에서 관계를 제거하는 방법은 무엇입니까? 감사.

답변

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는 넷 확장을 사용하여 목록에서 UpdateWithChildren을 호출하십시오.

통합 테스트 프로젝트가 어떻게 작동하는지 살펴보십시오.

+0

감사합니다. @ redent84. 'GetWithChildren()'을 호출하면 하위 항목을 추가 한 다음 다시 저장하면 성능 문제가 발생한다고 생각합니다. – user4126589

+0

그게 사실이라면 당신이 옳습니다. 그 중 하나를 삭제하기 위해 모든 요소를로드하는 것은 의미가 없습니다. 어쩌면 API의 편의 메소드를 추가 할 수 있습니다. – redent84

+0

고마워, 좋다. – user4126589