Я использую sqlite-net-pcl с SqLiteNetExtensions для внешнего ключа. У меня есть эти две таблицы (не уверен, что они написаны правильно) повестка дня может содержать много задач, мой вопрос в том, как мне написать методы CRUD для добавления/удаления/загрузки моих задач в мою повестку дня, я не уверен, как это работает когда у вас есть внешний ключ?
Я пытался понять документацию: https://bitbucket.org/twincoders/sqlite-net-extensions/src/master/
Без какого-либо успеха я не понимаю, что методы WithChildren, похоже, не распознаются, если только database = new SQLiteAsyncConnection(dbPath);
не работает для SqliteNetExtensions. Обратите внимание, что методы CRUD для моей повестки дня работают, но я пытаюсь реализовать методы CRUD для задач. Кроме того, в моем методе повестки дня, называемом GetAgendaAsync(), я не уверен, загрузит ли он данные с уже заданными задачами или мне нужно что-то сделать, чтобы добавить к нему задачи при загрузке?
Спасибо, я немного потерялся с этим.
Agenda.cs в папке "Модели"
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using SQLite;
using Calculette.Database;
using SQLiteNetExtensions.Attributes;
[Table("Agenda")]
public class Agenda
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Topic { get; set; }
public string Duration { get; set; }
public DateTime Date { get; set; }
[OneToMany(CascadeOperations = CascadeOperation.All)]
}
Tasks.cs в папке Models
using System;
using System.Collections.Generic;
using System.Text;
using SQLite;
using SQLiteNetExtensions.Attributes;
[Table("Task")]
public class Tasks
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
[ForeignKey(typeof(Agenda))]
public string Name { get; set; }
public string Time { get; set; }
[ManyToOne]
public Agenda Agenda { get; set; }
}
AgendaDatabase.cs в папке базы данных (все мои операции в настоящее время для таблицы Agenda)
using System;
using System.Collections.Generic;
using System.Text;
using SQLite;
using Calculette.Models;
using System.Threading.Tasks;
using Calculette.ViewModel;
using SQLiteNetExtensions.Attributes;
public class AgendaDatabase
{
readonly SQLiteAsyncConnection database;
public AgendaDatabase(string dbPath)
{
database = new SQLiteAsyncConnection(dbPath);
database.CreateTableAsync<Agenda>().Wait();
database.CreateTableAsync<Tasks>().Wait();
}
// Get all agenda
public Task<List<Agenda>> GetAgendasAsync()
{
return database.Table<Agenda>().ToListAsync();
}
// Get specific agenda
public Task<Agenda> GetAgendaAsync(int id)
{
return database.Table<Agenda>()
.Where(i => i.ID == id)
.FirstOrDefaultAsync();
}
// Insert new agenda (save)
public Task<int> SaveAgendaAsync(Agenda agenda)
{
if (agenda.ID != 0)
{
return database.UpdateAsync(agenda);
}
else
{
return database.InsertAsync(agenda);
}
}
//Delete specific agenda
public Task<int> DeleteAgendaAsync(Agenda agenda)
{
return database.DeleteAsync(agenda);
}
public Task<int> AddAgendaAsync(Agenda agenda)
{
return database.InsertAsync(agenda);
}
}