基本上我有一个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 Extensions结合使用,这样我基本上可以调用Insert并传递Client
对象来保存客户端,完成他们的地址,到数据库。像这样:
_db.InsertWithChildren(clientObject);
在我的应用程序(Xamarin.iOS和MvvmCross)中,我已经将一个预先存在的数据库与应用程序捆绑在一起,因此我不会在代码中创建表,因此我的失败点在于InsertWithChildren(clientObject)
调用。
我尝试删除预先存在的表,然后在代码中创建表,首先在Address
表中创建表,然后在Client
创建表,但在创建Client表时,它会告诉我它#34 ;不知道"关于Address
类型/属性。如果您先尝试Client
表,则会出现同样的错误。我已尝试尽可能多的变体,只需在一次通话中使用地址保存客户端,但无济于事。
任何人都可以对此有所了解吗?
答案 0 :(得分:1)
问题引发,因为所有关系属性都继承自SQLite-Net Ignore
属性。如果您使用不同的SQLite-Net版本,它将无法识别Ignore
属性,它将尝试保留带注释的属性,导致它因您看到的错误而崩溃。
长话短说:你可能正在使用一个SQLite-Net Extensions的注释和另一个SQLite-Net版本的数据库连接。
如果您使用的是SQLite-Net MvvmCross社区版,则必须使用SQLite-Net Extensions MvvmCross NuGet package,而不是PCL版。