2017-02-10 2 views
2

Я создаю приложение Xamarin Forms. Приложение содержит кнопку, которая создает новый список. Имя и дата списка сохраняются в одной таблице, но содержимое списка должно храниться в другой таблице, которая должна быть создана с использованием запроса. Я был в состоянии успешно вставлять записи в таблицу, которая содержит имена и даты списков, используя следующий подход:Создание таблицы SQLite программно

[Table("ToDoLists")] 
public class ShoppingList : INotifyPropertyChanged 
{ 
    private int _id; 

    [PrimaryKey, AutoIncrement] 
    public int Id 
    { 
     get 
     { 
      return _id; 
     } 

     set 
     { 
      _id = value; 
      OnPropertyChanged(nameof(Id)); 
     } 
    } 

    private string _name; 

    [NotNull] 
    public string Name 
    { 
     get 
     { 
      return _name; 
     } 

     set 
     { 
      _name = value; 
      OnPropertyChanged(nameof(Name)); 
     } 
    } 

    private string _date; 

    [NotNull] 
    public string Date 
    { 
     get 
     { 
      return _date; 
     } 

     set 
     { 
      _date = value; 
      OnPropertyChanged(nameof(Date)); 
     } 
    } 

    private string _description; 

    [NotNull] 
    public string Description 
    { 
     get 
     { 
      return _description; 
     } 

     set 
     { 
      _description = value; 
      OnPropertyChanged(nameof(Description)); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Я попытался следующие вещи:

  • Pass на имя списка как имя таблицы в инструкции [Table(tableName)], но IDE сообщает мне, что разрешено использовать только постоянные поля, а это значит, что я не могу динамически указывать имя таблицы
  • Я пробовал читать около SQLiteCommand, но примеры, которые мне даны использовать функции, недоступные в SQLite PCL (если я неправильно установил SQLite PCL).

Как именно создать таблицу с использованием запроса в SQLite PCL? Возможно ли это? Какие-либо предложения?

ответ

1

Взгляните на SQLite-net:

SQLite-сеть с открытым исходным кодом, минимальная библиотека, чтобы позволить .NET и Mono приложений для хранения данных в SQLite 3 баз данных. Сначала он был разработан для работы с Xamarin.iOS, но с тех пор вырос для работы на всех платформах (Xamarin. *, .NET, UWP, Azure и т. Д.).

SQLite-net был разработан как быстрый и удобный слой базы данных. Его цели вытекают из следующих целей:

  • Очень легко интегрироваться с существующими проектами и работает на всех платформах .NET.
  • Тонкая обертка по SQLite, которая является быстрой и эффективной. (Эта библиотека не должна быть узким местом ваших запросов.)
  • Очень простые методы для выполнения операций и запросов CRUD безопасно (с использованием параметров) и для получения результатов этих запросов строго типизированным способом.
  • Работает с вашей моделью данных, не заставляя вас менять свои классы. (Содержит небольшое отражение управляемый ORM слой.)

Во-первых, создать SQLiteAsyncConnection к базе данных:

private SQLiteAsyncConnection database; 
database = new SQLiteAsyncConnection("YourDatabasePath"); 

Затем вы можете использовать метод CreateTableAsync() создать таблицу:

await database.CreateTableAsync<ShoppingList>(); 

Для добавления данных к таблице вы можете сделать примерно следующее:

public async Task SaveShoppingObjects(List<ShoppingObjects> shoppingsObjects) 
{ 
    await database.RunInTransactionAsync(tran => 
    { 
     foreach (ShoppingObject s in shoppingObjects) 
     { 
      tran.InsertOrReplace(SqliteEntityFactory.Create(s)); 
     } 
    }); 
} 

SqliteEntityFactory.Create - метод, который поможет вам создать элемент таблицы.Это может выглядеть примерно так:

public static ShoppingList Create(ShoppingObject s) 
{ 
    ShoppingList slist = new ShoppingList(); 
    if (s == null) 
    { 
     return slist; 
    } 
    slist.Id = s.Id; 
    slist.Name = s.Name; 
    // etc... 

    return slist; 
} 

Если я правильно понимаю ваш вопрос, это должно сделать трюк!

+0

Спасибо! Я буду внимательно изучать SQLite Net! – Razor

 Смежные вопросы

  • Нет связанных вопросов^_^