1

基本上我有一个Client类和一个Address类如下

public class Client
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Description{ get; set; }
    public string Email { get; set; }
    public string Website { get; set; }
    public string PhoneNumber { get; set; }

    [ForeignKey(typeof(Address))]
    public int AddressId { get; set;}
    [OneToOne(CascadeOperations = CascadeOperation.All)]
    public Address Address { get; set; }
}

public class Address
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Line1 {get;set;}
    public string Line2 {get;set;}
    public string Line3 {get;set;}
    public string Line4 {get;set;}
    public string Line5 {get;set;}
    public string Line6 {get;set;}
}

我正在使用 nuget 包 SQLite.Net-PCL 和 SQLite.Net-PCL 扩展,这样我基本上可以调用 Insert 并传递Client对象以将客户端及其地址完整地保存到数据库。像这样:

_db.InsertWithChildren(clientObject);

在我的应用程序(带有 MvvmCross 的 Xamarin.iOS)中,我已经将一个预先存在的数据库与应用程序捆绑在一起,因此我没有在代码中创建表,所以我的故障点在InsertWithChildren(clientObject)通话中。

我已经尝试删除预先存在的表,然后在代码中创建表,先创建表,然后Address创建ClientClient 表,它告诉我它“不知道”Address类型/属性。如果您先尝试该Client表,则会出现同样的错误。我已经尝试了尽可能多的变体,以便在一次调用中保存带有地址的客户端,但无济于事。

任何人都可以对此有所了解吗?

4

1 回答 1

1

问题出现是因为所有关系属性都继承自 SQLite-NetIgnore属性。如果您使用不同的 SQLite-Net 版本,它将无法识别该Ignore属性,并且会尝试保留带注释的属性,从而导致它因您看到的错误而崩溃。

长话短说:您可能正在使用来自一个 SQLite-Net 扩展的注释和另一个 SQLite-Net 版本的数据库连接。

如果您使用 SQLite-Net MvvmCross 社区版,则必须使用SQLite-Net Extensions MvvmCross NuGet 包,而不是 PCL 包。

于 2014-11-06T18:35:27.697 回答