xamarin-формы sqlite multi таблицы - PullRequest
0 голосов
/ 29 марта 2019

Невозможно работать с несколькими таблицами. Что нужно сделать, чтобы работать с двумя, тремя и более таблицами?

Visual Studio >>> Xamarin-Forms

/// I think maybe this code needs to be fixed somehow.
/// this code is placed in App.cs (up)
static Data.TableTwo tabletwo;
static Data.TableOne tableone;
/// crashed
 public Task<int> SaveItemAsync(TableTwo item)
        {
            if (item.ID != 0)
            {
                return tabletwo.UpdateAsync(item);
            }
            else
            {
                return tabletwo.InsertAsync(item);
            }
        } 
/// ***I think maybe this code needs to be fixed somehow.
/// this code is placed in App.cs (down below)
public static Data.TableTwo tabletwo
        {
            get
            {
                if (datadistance == null)
                {
                    tabletwo = new Data.TableTwo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "TodoSQLite.db3"));
                }
                return tabletwo;
            }
        }
/// ***I think maybe this code needs to be fixed somehow.
/// this code is placed in App.cs (down below)
        public static Data.TableOne tableone
        {
            get
            {
                if (tableone == null)
                {
                    tableone = new Data.TableOne(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "TodoSQLite.db3"));
                }
                return tableone;
            }
        }

код выше работает правильно. Когда код выше называется. Приложение падает.

У меня есть две таблицы. С одной таблицей, когда пользователь работает (сохраняет и удаляет данные), тогда все работает. Если пользователь начинает работать с другой таблицей (сохранять данные), приложение вылетает.

!!! дерево приложений !!! База данных (папка) TableTwo (файл) TableOne (файл) Модели (папка) TableTwo (файл) TableOne (файл)

Все было сделано по коду из статьи https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/databases#using-sqlite

На самом деле, я просто скопировал код во второй раз и вставил в проект. - это то, что я сделал, создав вторую таблицу и работая с ней (удалив данные вставки)

1 Ответ

0 голосов
/ 29 марта 2019

Предположим, что ваши две таблицы имеют тип Загрузка и Категория , а ваша база данных имеет тип MyDatabase Возможно, вы захотите сохранить одно соединение с SqlLite внутрикласс MyDatabase и добавьте методы для взаимодействия с вашими таблицами следующим образом:

public class MyDatabase
{
    private readonly SQLiteAsyncConnection _connection;

    public MyDatabase():this(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "MyDatabase.db3"))
    {
    }

    internal MyDatabase(string dbPath)
    {
        _connection = new SQLiteAsyncConnection(dbPath);

        _connection.CreateTableAsync<Load>().Wait();
        _connection.CreateTableAsync<Category>().Wait();
    }

    public Task<List<Load>> GetLoads() => 
        _connection.Table<Load>().ToListAsync();

    public Task<List<Category>> GetCategories() => 
        _connection.Table<Category>().ToListAsync();

    public Task<Load> GetLoad(int id) => 
        _connection.Table<Load>().Where(i => i.Id == id).FirstOrDefaultAsync();

    public Task<int> SaveLoad(Load item) =>
        item.Id != 0 ? _connection.UpdateAsync(item) : _connection.InsertAsync(item);

    public Task<int> DeleteLoad(Load item) => 
        _connection.DeleteAsync(item);
}

Вот хороший пример: https://github.com/xamarin/xamarin-forms-samples/blob/master/Todo/Todo/Data/TodoItemDatabase.cs,, но он содержит одну таблицу ?

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