使用Sqlite-net-pcl创建多个表

时间:2018-09-10 13:01:04

标签: xamarin.forms sqlite-net-pcl

我正在使用xamarin形式和Sqlite-net-pcl(nuget)。我需要有关创建多个表的帮助。我设置了以下要求。我需要执行以下操作:

1)我需要在应用启动时创建表和数据库。如何在App.cs中执行此操作?

更新问题:

1)未创建表。为什么?

---1--- in PCL : add these

-- classes for table

using SQLite;

namespace MyApp.Model
{
    [Table("TblCountry")]
    public class Country
    {
        public string Country { get; set; }
        public string CountryCode { get; set; }
        public string OfficialLanguage { get; set; }

    }


 [Table("TblEmployees")]
    public class Employee
    {
      [PrimaryKey, AutoIncrement]
      public string FirstName { get; set; }
      public string LastName { get; set; }
      public string Address { get; set; }
    }

}


--- interface class

using System;
using System.Collections.Generic;
using System.Text;
using SQLite;

namespace MyApp.DataAccessHelpers
{
   public interface ISQLite
    {
        SQLiteConnection GetConnection();
    }
}



---2---in Xamarin.Droid: I add this class

using SQLite;
using System.IO;
using Xamarin.Forms;
using MyApp.Droid.Implementation;
using MyApp.DataAccessHelpers;


[assembly: Xamarin.Forms.Dependency(typeof(AndroidSQLite))]
namespace MyApp.Droid.Implementation
{
    class AndroidSQLite : ISQLite
    {
        public SQLite.SQLiteConnection GetConnection()
        {
            string documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
            var path = Path.Combine(documentsPath, DatabaseHelper.DbFileName);
            var conn = new SQLite.SQLiteConnection(path);
            return conn;
        }
    }
}

-------更新:

public class DatabaseHelper
 {
        static SQLiteConnection sqliteconnection;

        public const string DbFileName = "MyDb.db3";

        public DatabaseHelper()
        {
            try
            {
                sqliteconnection = DependencyService.Get<ISQLite>().GetConnection();
                sqliteconnection.CreateTable<CountryModel>();
                sqliteconnection.CreateTable<EmployeeModel>();

            }
            catch (Exception ex)
            {
                string strErr = ex.ToString();
            }
        }       

        public List<CountryModel> GetAllCountry()
        {
            return (from data in sqliteconnection.Table<CountryModel>()
                    select data).ToList();
        }


        public CountryModel GetCountryByHuNbr(string name)
        {
            return sqliteconnection.Table<CountryModel>().FirstOrDefault(c => c.Name == name);
        }


        public void DeleteAllCountry()
        {
            sqliteconnection.DeleteAll<CountryModel>();
        }


        public void DeleteCountryByid(int ID)
        {
            sqliteconnection.Delete<CountryModel>(ID);
        }


        public void InsertCountry(CountryModel country)
        {
            sqliteconnection.Insert(country);
        }

        public void UpdateCountry(CountryModel country)
        {
            sqliteconnection.Update(country);
        }

        //------- CRUD for employee

        public void InsertEmployee(EmployeeModel employee)
        {
            sqliteconnection.Insert(employee);

        }

       .....

       ... and all the CRUD for employee


    }
}

谢谢。

1 个答案:

答案 0 :(得分:0)

我创建了一个帮助程序类,其中包含与SQLite数据库进行交互所需的所有方法。我使用CreateTable()创建一个表。

在App.xaml.cs文件中,我创建了DataAccess帮助器类的实例,并调用了CreateLocalDbTables()方法。

DataAccessHelper

 public class DataAccess : IDisposable
{
    private SQLiteConnection Connection;

    #region Constructor

    public DataAccess(ISQLitePlatform sQLitePlatform, string dbPath)
    {
        this.Connection = new SQLiteConnection(sQLitePlatform, dbPath);
    }
    #endregion

    #region Methods

    public void CreateLocaldbTables()
    {
        this.Connection.CreateTable<Registration>();
        this.Connection.CreateTable<TransmissionLog>();
        this.Connection.CreateTable<Parameters>();
        this.Connection.CreateTable<Guest>();
    }

在APP.xaml.cs

public partial class App : Application
{
    #region Properties

    public static DataAccess DBConnection { get; set; }

    #endregion

    public App(string localDbPath, ISQLitePlatform sqlitePlatform)
    {
        InitializeComponent();

        DBConnection = new DataAccess(sqlitePlatform,localDbPath);
        DBConnection.CreateLocaldbTables();

模型

    namespace AppRegistration.Models
    {
        using SQLite;
        using System;

        [Table("Activity")]
        public class Actividad
        {
            [Column("IdActivity")]
            [PrimaryKey, Autoincrement]
            public int IdActivity { get; set; }

            [Column("IdEvent")]
            [PrimaryKey]
            public int IdEvent { get; set; }

            [Column("ActivityDescription")]
            [NotNull]
            public string ActivityDescription { get; set; }

            [Column("Status")]
            [NotNull]
            public string Status { get; set; }


            [Column("UserId")]
            [NotNull]
            public int UserId { get; set; }

        }
    }