建设有关系的两个表失败

问题描述:

我试图建立两个表,并在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

所有关系的注解从SQLite的-Net的Ignore特性,以便继承sequense SQLite的-Net的内层忽略此属性它正确地由源码网的扩展处理。如果SQLite的-Net的不承认Ignore注释可能是因为没有安装作为依赖的SQLite-网的说法相互矛盾。

TL; DR:检查您的依赖关系,并删除任何重复的SQLite,网库

根据不同的平台,它可能是更容易去除sqlite的净扩展NuGet包,简单的源复制到项目。

+0

谢谢,这有帮助。 – Chris

可以使超过1台在single call 但因为它iteates through provided类型,并分别调用每个类型的功能,你必须定义自己