2017-09-15 57 views
0

我試圖建立兩個表,並在Xamarin它們之間的關係跨plattform應用。下面是表的代碼:建設有關係的兩個表失敗

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

[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; } 
} 

臺處於代碼創建如下:

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

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

運行代碼時出現錯誤「未處理的異常發生「。在標記的行中。第一個表格是在那個時候創建​​的。我究竟做錯了什麼?

另一個問題是:是重要的建立在一定的順序表,因爲它們依賴於海誓山盟?

編輯:

堆棧跟蹤異常的(System.NotSupportedException):

在System.Threading.Tasks.Task.ThrowIfExceptional(System.Boolean includeTaskCanceledExceptions)[0x00011]在< 896ad1d315ca4ba7b117efb8dacaedcf >:0在System.Threading.Tasks.Task.Wait(System.Int32 millisecondsTimeout,System.Threading.CancellationToken的CancellationToken)[0x00043]在< 896ad1d315ca4ba7b117efb8dacaedcf>:0在System.Threading.Tasks.Task.Wait()[0x00000]在< 8 96ad1d315ca4ba7b117efb8dacaedcf>:0在.CODE.Data.ItemDatabase..ctor(System.String DBPATH)[0x00028]在d:\ CODE_COPY \ EigeneProjekte \ CN_ _Xamarin ********* \ CODE \數據\ ItemDatabase.cs:22

編輯2: 如果我走在例外,我發現下面的消息定睛一看:

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

這是可以理解的,因爲表DetailType還沒有在這一點上已經建成了。但是,我該如何通過ORM建立關係呢?是否有可能一次創建所有表格以確保關係正確並且沒有表格丟失?

+0

使用try/catch來獲得實際的異常 – Jason

+0

這是否異常有一個原因?因爲它沒有說任何有用的東西 – redent84

+0

@ redent84對不起,我遲到的答案和謝謝你試圖幫助。我已更新了我的問題,請你看看?謝謝:-) – Chris

回答

1

所有關係的註解從SQLite的-Net的Ignore特性,以便繼承sequense SQLite的-Net的內層忽略此屬性它正確地由源碼網的擴展處理。如果SQLite的-Net的不承認Ignore註釋可能是因爲沒有安裝作爲依賴的SQLite-網的說法相互矛盾。

TL; DR:檢查您的依賴關係,並刪除任何重複的SQLite,網庫

根據不同的平臺,它可能是更容易去除sqlite的淨擴展NuGet包,簡單的源複製到項目。

+0

謝謝,這有幫助。 – Chris