C#实践: 基于.net linq技术 使用sqlite数据库

(转载请注明来源:cnblogs coder-fang)

背景:使用VS2013 .net4.5 开发sqlite数据库访问应用。

 

  1. 创建并设计sqlite测试数据库dbsqlite.db,填上一些测试数据 ,数据库关系如下:
  2. C#实践: 基于.net linq技术 使用sqlite数据库_第1张图片
  3. 使用vs2013创建类库DBTest,打开Nuget管理器控制台:输入:
    PM> install-package linq2db.SQLite -v 1.10.0

    注:因为2013的nuget版本只支持到linq2db的1.10.0,如果是vs2015及以上则不用使用-v参数。

  4. 此时DBtest中会自动加入一个文件,如图:
  5. C#实践: 基于.net linq技术 使用sqlite数据库_第2张图片
  6. 编辑此文件夹中的CopyMe.Sqlite.tt.txt,只更改LoadSQLiteMetadata函数,第一个参数为dbsqlite.db所在的目录:
  7. 将CopyMe.Sqlite.tt.txt文件名修改为dbSQLite.tt,此时会出现运行此模板的提示,点击确定。C#实践: 基于.net linq技术 使用sqlite数据库_第3张图片
  8.  模板运行后,会自动生成linqsqlite相关类:C#实践: 基于.net linq技术 使用sqlite数据库_第4张图片

  9. 修改DbsqliteDB的构造函数:
  10. 修改前:C#实践: 基于.net linq技术 使用sqlite数据库_第5张图片 修改后:C#实践: 基于.net linq技术 使用sqlite数据库_第6张图片
  11. 在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 Departs { get { return db.Departs; } }
            public ITable Users { get { return db.Users; } }
            
            public struct UserDTO
            {
                public string name { get; set; }
                public string depart { get; set; }
            }
            public List 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(u);
                    
             
            }
    //用于为sqlite创建密码用的函数
            public void SetPassword(String pass)
            {
                SQLiteConnection conn = new SQLiteConnection(@"Data Source=.\dbsqlite.db;Version=3;");
                conn.SetPassword(pass);
                conn.Open();
            }
        }
    }
    View Code
  12. 创建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
  13. 运行测试,通过:C#实践: 基于.net linq技术 使用sqlite数据库_第7张图片

  14. 所有使用sqlite数据库的相关工程都需要引用System.Data.SQLite Core                   C#实践: 基于.net linq技术 使用sqlite数据库_第8张图片

  

完.

 

转载于:https://www.cnblogs.com/coder-fang/p/9364035.html

你可能感兴趣的:(C#实践: 基于.net linq技术 使用sqlite数据库)