使用与SQLiteNetExtensions

时间:2016-07-29 16:21:33

标签: c# sqlite xamarin.forms

我从CreateTable获得以下异常:

“不知道System.Collections.Generic.List`1 [SurgeArrestor.SAAnswer]”

这是一个包含以下软件包的Xamarin Forms应用程序: Package list

这是我的代码:

// SAForm.cs
using System;
using System.Collections.Generic;
using SQLite;
using SQLiteNetExtensions.Attributes;
using Newtonsoft.Json;

namespace SurgeArrestor
{
    public class SAForm
    {
        [PrimaryKey, AutoIncrement]
        public long SAFormID { get; set; }

        [JsonProperty(PropertyName = "_formID")]
        public long FormID { get; set; }

        [JsonProperty(PropertyName = "_formDate")]
        public string FormDate { get; set; }

        [JsonProperty(PropertyName = "_formNotes")]
        public string FormNotes { get; set; }

        [JsonProperty(PropertyName = "_formAnswers")]
        [OneToMany(CascadeOperations = CascadeOperation.All)]
        public List<SAAnswer> FormAnswers { get; set; }
    }
}

// SAAnswer.cs
using System;
using SQLite;
using SQLiteNetExtensions.Attributes;
using Newtonsoft.Json;

namespace SurgeArrestor
{
    [Table("SAAnswer")]
    public class SAAnswer
    {
        public SAAnswer() { }

        [PrimaryKey, AutoIncrement]
        public long SAAnswerID { get; set; } 

        [JsonProperty(PropertyName = "_formAnswerID")]
        public long FormAnswerID { get; set; }
        [JsonProperty(PropertyName = "_formID")]
        public long FormID { get; set; }
        [JsonProperty(PropertyName = "_questionID")]
        public long QuestionID { get; set; }
        [JsonProperty(PropertyName = "_answer")]
        public Boolean Answer { get; set; }

        [ForeignKey(typeof(SAForm))]
        [JsonIgnore]
        public long SAFormID { get; set; }

    }
}


// SAFormTable.cs
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;
using SQLite;
using SQLiteNetExtensions;

namespace SurgeArrestor
{
    public class SAFormTable : SQLiteConnection
    {
        static object locker = new object();

        public SAFormTable(string dbPath) : base(dbPath)
        {
            lock (locker)
            {
                CreateTable<SAForm>();  // throws exception
            }
        }
     // MORE CODE
}

这是我的第一个Xamarin.Forms应用。我使用MVVMCross.Community.Plugin.Sqlite / SQLiteNetExtensions-MvvmCross包使用了Xamarin应用程序,并使用它来为这些类建模。

我在翻译中遗漏了什么吗?据我所知,net扩展包提供了对同一ManyToOne实现的支持。

在堆栈溢出搜索和谷歌没有提供任何具体结果,我发现的例子似乎都遵循我在这里。

感谢您的任何见解/建议。

1 个答案:

答案 0 :(得分:0)

一对多收藏只是 - 收藏List是一种特殊类型的集合,支持排序和索引 - 这是SQL数据库本身不支持的。

尝试从

更改您的媒体资源
List<SAAnswer> FormAnswers { get; set; }

ICollection<SAAnswer> FormAnswers { get; set; }