2017-09-15 5 views
0

Ich versuche, zwei Tabellen und eine Beziehung zwischen ihnen in einer Xamarin-Cross-Plattform-Anwendung aufzubauen. Hier ist der Code für die Tabellen:Erstellen von zwei Tabellen mit Beziehung schlägt fehl

[Table("DetailTypes")] 
public class DetailType 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ID { get; set; } 
    public string Detail { get; set; } 
} 

und

[Table("DateDetails")] 
public class DateDetail 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ID { get; set; } 

    public int ID_Date { get; set; } 

    public string Wert { get; set; } 

    public DateTime Datum { get; set; } 

    [ForeignKey(typeof(DetailType))] 
    public int DetailTypeId { get; set; } 

    [OneToOne] 
    public DetailType DetailType { get; set; } 
} 

Die Tabellen in Code erstellt werden, wie folgt:

public ItemDatabase(string dbPath) 
    { 
     database = new SQLiteAsyncConnection(dbPath); 

     database.CreateTableAsync<DateDetail>().Wait(); //Error is thrown here 
     database.CreateTableAsync<DetailType>().Wait(); 
    } 

Bei der Ausführung des Codes ich den Fehler „eine nicht behandelte Ausnahme aufgetreten. " in der markierten Zeile. Die erste Tabelle wird an diesem Punkt erstellt. Was mache ich falsch?

Eine andere Frage: Ist es wichtig, die Tabellen in einer bestimmten Reihenfolge zu erstellen, da sie voneinander abhängig sind?

EDIT:

Stacktrace der Ausnahme (System.NotSupportedException):

bei System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in < 896ad1d315ca4ba7b117efb8dacaedcf >: 0 at System.Threading.Tasks.Task.Wait (System.Int32 Millisekundenzeitlimit, System.Threading.CancellationToken StornierungToken) [0x00043] in < 896ad1d315ca4ba7b117efb8dacaedcf>: 0 bei System.Threading.Tasks.Task.Wait() [0x00000] in < 8 96ad1d315ca4ba7b117efb8dacaedcf>: 0 unter .CODE.Data.ItemDatabase..ctor (System.String dbPath) [0x00028] in D: \ CODE_COPY \ EigeneProjekte \ CN_ _Xamarin ********* \ CODE \ Daten \ ItemDatabase.cs: 22

EDIT 2: Wenn ich einen genaueren Blick auf die Ausnahme, die ich die folgende Meldung finden:

Don't know about XXX.CODE.Models.DetailType 

Dies ist verständlich, da die Tabelle DetailType hat nicht An diesem Punkt wurde gebaut. Aber wie soll ich dann Beziehungen über ORM erstellen? Gibt es die Möglichkeit, alle Tabellen gleichzeitig zu erstellen, um sicherzustellen, dass die Beziehungen korrekt sind und keine Tabelle fehlt?

+0

Verwenden Sie einen Versuch/Catch, um die tatsächliche Ausnahme zu erhalten – Jason

+0

Hat diese Ausnahme eine Ursache?Weil es nichts nützliches sagt – redent84

+0

@redent84 Sorry für meine späte Antwort und danke für den Versuch zu helfen. Ich habe meine Frage aktualisiert, könntest du bitte einen Blick darauf werfen? Danke :-) – Chris

Antwort

1

Alle Beziehung Anmerkungen von SQLite-Net Ignore erben Attribut so Die innere Schicht von SQLite-Net ignoriert dieses Attribut, das von sqlite-net-extensions korrekt verarbeitet wird. Wenn SQLite-Net die Ignore Annotation nicht erkennt, liegt das wahrscheinlich daran, dass in Konflikt stehende Versionen von SQLite-Net als Abhängigkeiten installiert sind.

TL; DR: NuGet Paket und kopieren Sie einfach die Quellen für das Projekt Ihre Abhängigkeiten prüfen und entfernen Sie alle SQLite-Net Bibliothek dupliziert

auf der Plattform abhängig, kann es einfacher sein, die SQLite-net-Erweiterungen zu entfernen .

+0

Danke, das hat geholfen. – Chris

Verwandte Themen