2017-04-21 7 views
2

In UWP genieße ich die Vorteile der Verwendung von SQLite.Net-PCL, Erstellen von Klassen in Apps als ObservableCollections verwendet werden, um an die GridView zu binden. Nach dem Einschließen von SQLiteNetExtensions zum Erstellen einer Datenbank mit Fremdschlüsseln ist mir aufgefallen, dass die Fremdschlüssel bei der Anzeige der Datenbank in SQLite Maestro nicht wirklich erstellt wurden. Indizes werden stattdessen erstellt. Welchen Vorteil hat die Verwendung von SQLiteNetExtensions, wenn keine Fremdschlüssel wirklich erstellt werden?SQLite-Fremdschlüssel mit SQLite.Net-PCL erstellen

Möglicherweise sind Fremdschlüssel nicht erforderlich (später in der App, nachdem die Datenbank erstellt wurde), wenn mit LAMDA-Ausdrücken oder LINQ abgefragt wird. Wenn ich Abfragen ausgeführt habe, um Tabellen mit Fremdschlüsseln zu erstellen, ohne SQLite.Net-PCL zu verwenden, kann ich SQLite.Net-PCL weiterhin verwenden, um ObservableCollections an GridViews zu binden?

Beispiel Datenbank:

[Table("Book")] 
public class Book 
{ 
    [PrimaryKey, AutoIncrement, Column("ID")] 
    public int ID { get; set; } 
    [Column("Name")] 
    public string Name { get; set; } 

    [ManyToMany] 
    public List<Checkout> Checkout { get; set; } 
} 

[Table("School")] 
public class School 
{ 
    [PrimaryKey, AutoIncrement, Column("ID")] 
    public int ID { get; set; } 
    [Column("Name")] 
    public string Name { get; set; } 

    [OneToMany] 
    public List<Student> Student { get; set; } 
    [ManyToMany] 
    public List<Checkout> Checkout { get; set; } 
} 

[Table("Student")] 
public class Student 
{ 
    [PrimaryKey, AutoIncrement, Column("ID")] 
    public int ID { get; set; } 
    [Column("SchoolID"), ForeignKey(typeof(School))] 
    public int SchoolID { get; set; } 
    [Column("Name")] 
    public string Name { get; set; } 

    [ManyToOne] 
    public School School { get; set; } 
} 

[Table("Checkout")] 
public class Checkout 
{ 
    [PrimaryKey, AutoIncrement, Column("ID")] 
    public int ID { get; set; } 
    [Column("SchoolID"), ForeignKey(typeof(School))] 
    public int SchoolID { get; set; } 
    [Column("BookID"), ForeignKey(typeof(Book))] 
    public int BookID { get; set; } 
} 

SQLite ist neu für mich, und es gibt so viele SQLite Nuget Pakete zur Auswahl. Tutorials sind ein paar Jahre alt, also könnte es jetzt etwas Besseres geben. Danke im Voraus.

Antwort

1

Auch wenn Sie den Entity Framework-Core mit der UWP-App für Ihren Datenzugriff verwendet haben, sind Fremdschlüssel nicht verfügbar. Standardmäßig sind Fremdschlüssel nicht in SQLite

aktiviert https://docs.microsoft.com/en-us/ef/core/providers/sqlite/limitations

https://sqlite.org/foreignkeys.html

+1

Aber Sie können Fremdschlüssel in SQLite v3.0 + richtig? Beispiel: conn.Execute ("PRAGMA foreign_keys = ON"); – detailCode

+0

@detailCode, die tatsächliche Antwort sein sollte. SQLite unterstützt Fremdschlüssel, während im Standard deaktiviert sind ... – Tomas

0

Dort haben Sie example von der offiziellen Website, wie in SQLite Fremdschlüssel verwenden.

+0

Wenn ich Abfragen ausgeführt habe, um Tabellen mit Fremdschlüsseln zu erstellen, ohne SQLite.Net-PCL zu verwenden, kann ich SQLite.Net-PCL weiterhin verwenden, um ObservableCollections an GridViews zu binden? – detailCode

+0

Dies hat keinen Einfluss darauf, was Sie mit Daten tun möchten, die in der Datenbank gespeichert sind. – Szymson