10

我正在开发一个 WinRT 应用程序。我想用来sqlite-net-extensions支持OneToManyManyToMany

using SQLiteNetExtensions.Attributes;
using SQLite;

[Table("WorkFlow")]
public class Workflow
{
    [PrimaryKey, AutoIncrement]
    public int WorkflowId { get; set; }
    public string Name { get; set; }
    public int Revision { get; set; }
    [OneToMany]
    public List<Step> Steps { get; set; }
}

[Table("Step")]
public class Step
{
    public string Type { get; set; }
    public string Description { get; set; }
    [ManyToOne]
    public Workflow Workflow { get; set; }
}

当我尝试为数据库生成表时,它会引发异常:

app_name.exe 中出现“System.NotSupportedException”类型的异常,但未在用户代码中处理其他信息:不了解 System.Collections.Generic.List`1 [app_name.Model.modelName]

这是从里面传来SqlTypeSQLite.cs

但是从sqlite-net-extensions 主页上的示例来看,List属性应该可以正常工作。

这是他们示例的副本:

public class Stock
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    [MaxLength(8)]
    public string Symbol { get; set; }

    [OneToMany]      // One to many relationship with Valuation
    public List<Valuation> Valuations { get; set; }
}

public class Valuation
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    [ForeignKey(typeof(Stock))]     // Specify the foreign key
    public int StockId { get; set; }
    public DateTime Time { get; set; }
    public decimal Price { get; set; }

    [ManyToOne]      // Many to one relationship with Stock
    public Stock Stock { get; set; }
}

谁能给我一些解决这个问题的建议?谢谢。

4

3 回答 3

9

这通常是一个安装问题,因为 SQLite-Net Extensions 是使用 SQLite-Net 库编译的,但您正在使用另一个库运行您的应用程序。您可以尝试将PCL NuGet包添加到您的项目中,也可以从 Git 下载源代码并直接引用该项目。

于 2014-08-01T16:20:07.817 回答
3

尝试给步骤)一个主键和一个外键引用工作流

[Table("Step")]
public class Step
{
    [PrimaryKey, AutoIncrement]
    public int StepId { get; set; }
    [ForeignKey(typeof(WorkFlow))]
    public int WorkFlowId { get; set; }
    public string Type { get; set; }
    public string Description { get; set; }
    [ManyToOne]
    public Workflow Workflow { get; set; }
}
于 2014-05-23T09:52:41.963 回答
0

修复:从所有项目中卸载对任何 SQLite NuGet 包的所有引用,在我的情况下,这是一个 Xamarin.Forms 解决方案。清理解决方案作为额外的预防措施(您甚至可以检查软件包是否已从软件包文件夹中卸载,以防出现文件访问问题阻止删除)。通过搜索 SQLiteNetExtensions(不是 sqlite-net-pcl)并检查是否在 Visual Studio 中选择了“包含预发布”选项(在 2017 年测试)再次安装。这将安装 sqlite-net-pcl v1.2.0 作为最小依赖项和几个文件,包括单词“Raw”。您可以在此时进行测试以检查“不知道 System.Collections.Generic.List`1”错误。对我来说,这消失了。现在应该可以安全地将 sqlite-net-pcl 更新到最新版本,在撰写本文时它是 v1.3.3。

背景:我在以下组合中遇到了同样的问题:

  1. sqlite-net-pcl v1.3.3
  2. SQLiteNetExtensions v2.0.0-alpha2

在我的第一次尝试中,我首先通过 NuGet 安装了 sqlite-net-pcl,然后安装了 SQLiteNetExtensions 的最新稳定版本。在发现扩展与 sqlite-net-pcl 不兼容后,我更新到最新的预发布版本。我遇到了同样的“不知道 System.Collections.Generic.List`1”错误,发现它非常令人困惑,导致我首先尝试其他事情并质疑我是否犯了错误。清理项目、删除包(从文件夹中)和恢复对我不起作用。我没有检查包配置,但使用 NuGet 管理器并与测试项目进行比较,一切都是一样的。卸载我的修复中提到的所有内容并让 SQLiteNetExtensions 为我进行依赖项检查修复了问题。

PS 当天早些时候,NuGet 为一个新的 Xamarin.Forms 项目下载了两个包,文件大小为 0KB,以典型方式安装,我不得不从另一个项目中复制它们。我通常不会遇到与 NuGet 相关的问题。

于 2017-07-21T10:32:00.783 回答