0

我将 sqlite-net-pcl 与 SqLiteNetExtensions 一起使用作为外键。我有这两个表(不确定它们是否写得正确)一个议程可以包含许多任务,我的问题是我如何编写 CRUD 方法来在我的议程中添加/删除/加载我的任务,我不确定这是如何工作的当你有一个外键?

我试图理解文档:https ://bitbucket.org/twincoders/sqlite-net-extensions/src/master/

没有任何成功,我没有得到的是WithChildren方法似乎没有被识别,除非database = new SQLiteAsyncConnection(dbPath);它不适用于SqliteNetExtensions。请注意,我的议程的 CRUD 方法正在工作,但我正在尝试为这些任务实现 CRUD 方法。同样在我的名为 GetAgendaAsync() 的议程方法中,我不确定这是否会加载带有任务的数据,或者我必须在加载时做一些事情来将任务添加到其中?

谢谢,我有点迷失了。

Models 文件夹中的 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

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

Database 文件夹中的 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);
    }
}
4

0 回答 0