Search code examples
c#sqlitesqlite-net

Creating a ManyToMany relationship between two models


I'm new to creating a Windows Store app and it requires a use of a database. I've settled for sqlite and am using the sqlite-net package. However, I'm unsure of how to create a m2m relationship between two models.

class ModelA
{
     [PrimaryKey, AutoIncrement]
     public int Id { get; set; }
     public string name { get; set; }
     <relationship to ModelB>
} 


class ModelB
{
     [PrimaryKey, AutoIncrement]
     public int Id { get; set; }
     public string name { get; set; }
}

Would I have to use a List? or a byte[]? How can I guarantee the property will be constrained to ModelB?


Solution

  • You might be able to use sqlite-net-extensions, it has a ManyToMany attribute that seems perfect for your needs. This is an example of its use from their website.

    public class Student
    {
        [PrimaryKey, AutoIncrement]
        public int StudentId { get; set; }
    
        public string Name { get; set; }
        public int Age { get; set; }
    
        [ManyToMany(typeof(StudentsGroups))]
        public List<Group> Groups { get; set; }
    
        public int TutorId { get; set; }
        [ManyToOne("TutorId")] // Foreign key may be specified in the relationship
        public Teacher Tutor { get; set; }
    }
    
    public class Group
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
    
        public string GroupName { get; set; }
    
        [ForeignKey(typeof(Teacher))]
        public int TeacherId { get; set; }
    
        [ManyToOne]
        public Teacher Teacher { get; set; }
    
        [ManyToMany(typeof(StudentsGroups))]
        public List<Student> Students { get; set; } 
    }
    
    public class StudentGroups
    {
        [ForeignKey(typeof(Student))]
        public int StudentId { get; set; }
    
        [ForeignKey(typeof(Group))]
        public int GroupId { get; set; }
    }