使用关系构建两个表失败

Building two tables with relation fails

我正在尝试在 Xamarin 跨平台应用程序中建立两个 table 以及它们之间的关系。这是 table 的代码:

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

table的创建代码如下:

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

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

当 运行 代码时,我在标记行中得到错误 "An unhandled exception occured."。第一个 table 是在那个时候创建​​的。我做错了什么?

另一个问题:按特定顺序创建 table 是否重要,因为它们相互依赖?

编辑:

异常的 StackTrace (System.NotSupportedException):

at System.Threading.Tasks.Task.ThrowIfExceptional (System.Boolean includeTaskCanceledExceptions) [0x00011] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 at System.Threading.Tasks.Task.Wait (System.Int32 millisecondsTimeout, System.Threading.CancellationToken cancellationToken) [0x00043] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 at System.Threading.Tasks.Task.Wait () [0x00000] in <896ad1d315ca4ba7b117efb8dacaedcf>:0 at .CODE.Data.ItemDatabase..ctor (System.String dbPath) [0x00028] in D:\CODE_COPY\EigeneProjekte\CN__Xamarin*********\CODE\Data\ItemDatabase.cs:22

编辑 2: 如果我仔细查看异常,我会发现以下消息:

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

这是可以理解的,因为此时尚未构建 table DetailType。但是我应该如何通过 ORM 创建关系呢?是否有可能一次创建所有 table 以确保关系正确并且没有 table 丢失?

您可以在 single call 中制作超过 1 个 table 但是由于它 iteates through provided 分别为每种类型键入和调用函数,因此您必须自己定义序列

所有关系注释都继承自 SQLite-Net Ignore 属性,因此 SQLite-Net 的内层忽略此属性,它已被 sqlite-net-extensions 正确处理。如果 SQLite-Net 无法识别 Ignore 注释,可能是因为作为依赖项安装的 SQLite-Net 版本存在冲突。

TL;DR:检查您的依赖项并删除任何重复的 SQLite-Net 库

根据平台的不同,删除 sqlite-net-extensions nuget 包并简单地将源代码复制到项目中可能更容易。