我正在尝试在Xamarin交叉平台应用程序中构建两个表及它们之间的关系。这是表格的代码:
[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();
}
运行代码时,我收到错误“发生未处理的异常”。在标记的行。第一个表是在那时创建的。我做错了什么?
另一个问题:以特定顺序创建表格是否重要,因为它们依赖于彼此?
修改
异常的StackTrace(System.NotSupportedException):
在System.Threading.Tasks.Task.ThrowIfExceptional(System.Boolean includeTaskCanceledExceptions)[0x00011] in&lt; 896ad1d315ca4ba7b117efb8dacaedcf&gt;:0 at System.Threading.Tasks.Task.Wait(System.Int32 millisecondsTimeout,System.Threading.CancellationToken cancelToken)[0x00043]在&lt; 896ad1d315ca4ba7b117efb8dacaedcf&gt;:0中的System.Threading.Tasks.Task.Wait()[0x00000] in&lt; 896ad1d315ca4ba7b117efb8dacaedcf&gt ;:0 at .CODE.Data.ItemDatabase..ctor (System.String dbPath)[0x00028]在D:\ CODE_COPY \ EigeneProjekte \ CN _ _Xamarin ********* \ CODE \ Data \ ItemDatabase.cs:22
编辑2: 如果我仔细查看异常,我会发现以下消息:
Don't know about XXX.CODE.Models.DetailType
这是可以理解的,因为此时尚未构建表DetailType。但是我怎么能通过ORM建立关系呢?是否有可能一次创建所有表以确保关系正确且没有表丢失?
答案 0 :(得分:1)
您可以在single call中制作多个表格 但由于iteates through provided类型和调用分别对每种类型起作用,因此您必须自己定义序列
答案 1 :(得分:1)
所有关系注释都继承自SQLite-Net Ignore
属性,因此SQLite-Net的内层忽略了sqlite-net-extensions正确处理的这个属性。如果SQLite-Net无法识别Ignore
注释,可能是因为SQLite-Net的安装版本存在冲突的依赖关系。
TL; DR:检查您的依赖项并删除任何重复的SQLite-Net库
根据平台的不同,删除sqlite-net-extensions nuget包可能更容易,只需将源代码复制到项目中即可。