如何使用 SQLite-net-extensions 允许 NULL 外键
How to Allow NULL Foreign Keys with SQLite-net-extensions
我正在尝试添加可为 null 的外键映射,但它不起作用。我知道数据库允许空值,因为我可以在使用 Datagrip 时插入一个带有空外键的新记录。我只在尝试从 Android(SQLite.SQLiteException: 'Constraint') 的 Xamarin.Forms 项目构建中插入时出现错误
我的 类 看起来像:
public class Item
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
...
[ForeignKey(typeof(Location))]
public int LocationId { get; set; }
[ManyToOne]
public Location Location { get; set; }
}
public class Location
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
...
[OneToMany]
public List<Item> Items { get; set; }
}
我的插页像
//This will no work
var todoItem = new Item()
{
Name = "Test item " + DateTime.Now.TimeOfDay.ToString(),
Description = "Desc",
Location = null // I tried with and without this line
};
await App.Database.SaveItemAsync(todoItem);
//This will work
var todoItem = new Item()
{
Name = "Test item " + DateTime.Now.TimeOfDay.ToString(),
Description = "Desc",
LocationId = 1
};
await App.Database.SaveItemAsync(todoItem);
知道我做错了什么吗?谢谢
显然库需要 id 字段可以为空,所以
[ForeignKey(typeof(Location))]
public int LocationId { get; set; }
我应该使用
[ForeignKey(typeof(Location))]
public int? LocationId { get; set; }
PS:在我的例子中,只是构建项目并没有使更改生效,我只能在重建项目后才能看到结果..(我是 Xamarin 的新手,可能我有什么配置错误...我希望)
我正在尝试添加可为 null 的外键映射,但它不起作用。我知道数据库允许空值,因为我可以在使用 Datagrip 时插入一个带有空外键的新记录。我只在尝试从 Android(SQLite.SQLiteException: 'Constraint') 的 Xamarin.Forms 项目构建中插入时出现错误 我的 类 看起来像:
public class Item
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
...
[ForeignKey(typeof(Location))]
public int LocationId { get; set; }
[ManyToOne]
public Location Location { get; set; }
}
public class Location
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
...
[OneToMany]
public List<Item> Items { get; set; }
}
我的插页像
//This will no work
var todoItem = new Item()
{
Name = "Test item " + DateTime.Now.TimeOfDay.ToString(),
Description = "Desc",
Location = null // I tried with and without this line
};
await App.Database.SaveItemAsync(todoItem);
//This will work
var todoItem = new Item()
{
Name = "Test item " + DateTime.Now.TimeOfDay.ToString(),
Description = "Desc",
LocationId = 1
};
await App.Database.SaveItemAsync(todoItem);
知道我做错了什么吗?谢谢
显然库需要 id 字段可以为空,所以
[ForeignKey(typeof(Location))]
public int LocationId { get; set; }
我应该使用
[ForeignKey(typeof(Location))]
public int? LocationId { get; set; }
PS:在我的例子中,只是构建项目并没有使更改生效,我只能在重建项目后才能看到结果..(我是 Xamarin 的新手,可能我有什么配置错误...我希望)