C#實踐: 基於.net linq技術 使用sqlite數據庫

(轉載請註明來源:cnblogs coder-fang)sql

背景:使用VS2013 .net4.5 開發sqlite數據庫訪問應用。數據庫

 

  1. 建立並設計sqlite測試數據庫dbsqlite.db,填上一些測試數據 ,數據庫關係以下:
  2. 使用vs2013建立類庫DBTest,打開Nuget管理器控制檯:輸入:
    PM> install-package linq2db.SQLite -v 1.10.0

    注:由於2013的nuget版本只支持到linq2db的1.10.0,若是是vs2015及以上則不用使用-v參數。ide

  3. 此時DBtest中會自動加入一個文件,如圖:
  4. 編輯此文件夾中的CopyMe.Sqlite.tt.txt,只更改LoadSQLiteMetadata函數,第一個參數爲dbsqlite.db所在的目錄:
  5. 將CopyMe.Sqlite.tt.txt文件名修改成dbSQLite.tt,此時會出現運行此模板的提示,點擊肯定。
  6.  模板運行後,會自動生成linqsqlite相關類:函數

  7. 修改DbsqliteDB的構造函數:
  8. 修改前: 修改後:
  9. 在DBTest工程下建立DBHelper類:單元測試

    using DataModels; using LinqToDB; using System; using System.Collections.Generic; using System.Data.SQLite; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DBTest { public class DBHelper { static String connstr = @"Data Source=.\dbsqlite.db;Version=3;"; static DbsqliteDB db = new DbsqliteDB(connstr); public ITable<Depart> Departs { get { return db.Departs; } } public ITable<User> Users { get { return db.Users; } } public struct UserDTO { public string name { get; set; } public string depart { get; set; } } public List<UserDTO> GetUsers(string startWith) { // var names = from c in db.Users select new { c.Name };
                    var users = db.Users.Where(u=>u.Name.StartsWith(startWith)).Select(u=>new UserDTO(){name= u.Name, depart=u.Depart.Depart_Column }); return users.ToList() ; } public int SaveUser(User u) { return db.Insert<User>(u); } //用於爲sqlite建立密碼用的函數
            public void SetPassword(String pass) { SQLiteConnection conn = new SQLiteConnection(@"Data Source=.\dbsqlite.db;Version=3;"); conn.SetPassword(pass); conn.Open(); } } }
    View Code
  10. 建立DBUintTest單元測試工程,添加對DBTest的引用,修改UnitTest.cs,代碼以下 :測試

    using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using DBTest; using DataModels; namespace DBUnitTest { [TestClass] public class UnitTest { private DBHelper help; [TestMethod] public void TestGetNames() { var obj = help.GetUsers("z"); obj.ForEach(u => { Console.WriteLine(u.name+"\t"+u.depart); }); Assert.IsTrue(obj.Count > 0); } [TestMethod] public void TestSaveUser() { User u = new User(); u.Name = "zhengqi"; u.Age = 23; u.Sex = 'F'; u.Department = (int)help.Departs.Find(2).Id; Assert.IsTrue(help.SaveUser(u) > 0); } [TestInitialize] public void SetPassword() { help = new DBHelper(); help.SetPassword("321"); } } }
    View Code
  11. 運行測試,經過:spa

  12. 全部使用sqlite數據庫的相關工程都須要引用System.Data.SQLite Core                   .net

  

完.設計

相關文章
相關標籤/搜索