首先引用命名空間數據庫
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