Как разрешить внешние ключи NULL с расширениями SQLite- net - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь добавить обнуляемое сопоставление внешнего ключа, но оно не работает. Я знаю, что база данных допускает пустые значения, поскольку при использовании Datagrip я могу вставить новую запись с нулевым внешним ключом. Я получаю ошибку только при попытке вставить из сборки проекта Xamarin.Forms для Android (SQLite.SQLiteException: 'Constraint') Мои классы выглядят так:

 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);

Есть идеи, что я делаю не так? Спасибо

1 Ответ

0 голосов
/ 18 апреля 2020

Очевидно, что библиотеке нужно, чтобы поле id было обнуляемым, поэтому вместо

[ForeignKey(typeof(Location))]  
public int LocationId { get; set; }

я должен использовать

[ForeignKey(typeof(Location))]  
public int? LocationId { get; set; }

PS: в моем случае просто сборка проекта не выполнялась После того, как изменения вступили в силу, я смог увидеть результат только после перестройки проекта ... (Я новичок в Xamarin, возможно, у меня что-то неправильно настроено ... Надеюсь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...