【WindowsPhone】利用反射初始化和添加 SQLite數據庫

首先引用命名空間數據庫

using System.Reflection

瞭解一下 Assembly 類app

//
// 摘要:
//     表示一個程序集,它是一個可重用、無版本衝突而且可自我描述的公共語言運行時應用程序構造塊。
public abstract class Assembly

咱們把Model類都約定好放在同一個命名空間下,下面以User類爲例:this

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using SQLite;
 7 using Backyard.Common;
 8 namespace MyAssembly.Models
 9 {
10     [Table("User")]
11     public class User
12     {
13         public User()
14         {
15         }
16         [PrimaryKey,AutoIncrement]
17         public int Id { get; set; }
18 
19         [NotNull]
20         public string Pwd { get; set; }
21         public DateTime ResetTime { get; set; }
22 
23         public AccountStatus AccountStatus { get; set; }
24 
25     }
26 }

咱們在看看SQLite CreateTable 方法spa

/// <summary>
/// Executes a "create table if not exists" on the database. It also
/// creates any specified indexes on the columns of the table. It uses
/// a schema automatically generated from the specified type. You can
/// later access this schema by calling GetMapping.
/// </summary>
/// <param name="ty">Type to reflect to a database table.</param>
/// <param name="createFlags">Optional flags allowing implicit PK and indexes based on naming conventions.</param>  
/// <returns>
/// The number of entries added to the database schema.
/// </returns>
public int CreateTable(Type ty, CreateFlags createFlags = CreateFlags.None)

也就是說 ,當表存在時,調用CreateTable時是不會將已經存在的表覆蓋的,表不存在時,則建立數據表。code

好了  ,瞭解了這些  ,咱們就能夠說說怎麼 初始化/添加新的數據表了對象

//根據數據庫地址獲取 SQLiteConnection 
public static SQLiteConnection GetConn()
{
      return new SQLiteConnection(DBSetting.DBPath);
}
//獲取一個程序集對象 經過當前APP的程序集名稱
Assembly ass = Assembly.Load(new AssemblyName("MyAssembly"));

//獲取該程序集中的 公共類型集合
var types = ass.ExportedTypes;

using (var conn = GetConn())
{
    foreach (var t in types)
    {
         if (t.Namespace == "MyAssembly.Models")
         {
            //這個時候 ,若是數據庫不存在 ,就會建立數據庫
            conn.CreateTable(t);
         }
    }
}

咱們能夠在 APP首次啓動時 執行一次這個過程  ,無論是首次安裝,仍是  更新的新版本  ,均可以保證SQLite數據表的完整。blog

 

轉載原創文章請註明,轉載自: 老朱的自留地 » 【WindowsPhone】利用反射初始化和添加 SQLite數據庫ci

相關文章
相關標籤/搜索