Xamarin 表单创建 Table 基于 SqLite 的复杂问题 class
Xamarin Form Create Table Problem in SqLite based complex class
我在 Xamarin Forms 上开发跨平台移动应用程序。
我尝试在 sqlite 中创建 tables。我的 class 名字是 'News',新闻 class 包含 'Country' class。
创建 table 代码,class 如下所示。
[Serializable]
[DataContract]
public class News
{
[PrimaryKey]
[DataMember]
public int Id { get; set; }
[DataMember]
public Guid ActivityId { get; set; }
[DataMember]
public int Type { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public CountryBase Country { get; set; }
}
代码类似于
var db = new SQLiteConnection (dbPath);
db.CreateTable<News> ();
这是行不通的。当我删除国家 class 时,它起作用了。
我尝试单独创建国家 table,但我仍然无法创建新闻 table。我该如何解决这个问题?
SQLite
不允许关系,public CountryBase Country { get; set; }
被解释为一个。
所以你需要:
要么在插入之前将您的国家/地区序列化为字符串,您将得到:
[DataMember]
public string SerializedCountry { get; set; }
[Ignore]
public CountryBase Country { get; set; }
并且您需要使用国家/地区的 Json.net 手动处理序列化。
或创建另一个国家/地区 table,并在您的实体定义中指定其 ID:
[Serializable]
[DataContract]
public class News
{
[PrimaryKey]
[DataMember]
public int Id { get; set; }
[DataMember]
public Guid ActivityId { get; set; }
[DataMember]
public int Type { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public int CountryId { get; set; }
}
[Serializable]
[DataContract]
public class Country
{
[PrimaryKey]
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
...
}
我在 Xamarin Forms 上开发跨平台移动应用程序。 我尝试在 sqlite 中创建 tables。我的 class 名字是 'News',新闻 class 包含 'Country' class。
创建 table 代码,class 如下所示。
[Serializable]
[DataContract]
public class News
{
[PrimaryKey]
[DataMember]
public int Id { get; set; }
[DataMember]
public Guid ActivityId { get; set; }
[DataMember]
public int Type { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public CountryBase Country { get; set; }
}
代码类似于
var db = new SQLiteConnection (dbPath);
db.CreateTable<News> ();
这是行不通的。当我删除国家 class 时,它起作用了。 我尝试单独创建国家 table,但我仍然无法创建新闻 table。我该如何解决这个问题?
SQLite
不允许关系,public CountryBase Country { get; set; }
被解释为一个。
所以你需要:
要么在插入之前将您的国家/地区序列化为字符串,您将得到:
[DataMember]
public string SerializedCountry { get; set; }
[Ignore]
public CountryBase Country { get; set; }
并且您需要使用国家/地区的 Json.net 手动处理序列化。
或创建另一个国家/地区 table,并在您的实体定义中指定其 ID:
[Serializable]
[DataContract]
public class News
{
[PrimaryKey]
[DataMember]
public int Id { get; set; }
[DataMember]
public Guid ActivityId { get; set; }
[DataMember]
public int Type { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public int CountryId { get; set; }
}
[Serializable]
[DataContract]
public class Country
{
[PrimaryKey]
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
...
}