ADO.Net和DoNetCore輕量級ORM框架之SmartDb.NetCore


SmartDb.NetCore是一套基於ADO.Net和DoNetCore對SqlServer、MySql、SQLite、PostgreSql數據庫支持的快速開發和輕量級ORM框架.

SmartDb.NetCore框架特點如下:

  • 支持.NF和DoNetCore框架。
  • 輕量級半ORM框架,封裝基於單表CRUD等操作,同時支持事務、SQL語句、存儲過程操作。
  • 提供基於Emit將IDataReader、DataTable轉化為實體對象。
  • 支持非參數化SQL語句、原生參數化SQL語句及類似Dapper參數化功能,提供原生ADO.Net對CRUD操作功能。

本源碼提供SmartDb.NetCore對MSSql、MySql、SQLite調用一些測試代碼,大家根據測試項目配置自己創建測試數據庫和測試數據表。

SmartDb.MySql.NetCore是SmartDb.NetCore對MySql支持的Nuget包,Nuget包地址如下:SmartDb.MySql.NetCore
SmartDb.SqlServer.NetCore是SmartDb.NetCore對SqlServer支持的Nuget包,Nuget包地址如下:SmartDb.SqlServer.NetCore

SmartDb.SQLite.NetCore是SmartDb.NetCore對SQLite支持的Nuget包,Nuget包地址如下:SmartDb.SQLite.NetCore

SmartDb.PostgreSql.NetCore是SmartDb.NetCore對SQLite支持的Nuget包,Nuget包地址如下:SmartDb.PostgreSql.NetCore

 

框架Git開源地址:https://github.com/joyet/SmartDb.NetCore
框架博客地址:https://www.cnblogs.com/joyet-john/articles/9295985.html#4021708
聯系郵箱:joyet@qq.com

 

示例代碼如下:

實體類:

 

using SmartDb;
using SmartDb.NetCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestSmartDbConsole
{
    //[Table(TableName = "userinfo")]
    //[Table(TableName="userinfo",IsGetAutoIncrementValue =true)]
    public class UserInfo
    {
        [TableColumn(IsPrimaryKey = true)]
        //[TableColumn(IsPrimaryKey = true,IsAutoIncrement =true)]
        public int UserId { get; set; }

        public string UserName { get; set; }

        //[TableColumn(IsSetDefaultValue=true, DefaultValue= 50)]
        public int Age { get; set; }

        public string Email { get; set; }
    }
}

 

調用SmartDb.NetCore的測試類

 

using SmartDb.NetCore;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace TestSmartDbConsole
{
   public class DbBase<Entity>
    {
        public SqlDbContext DbContext { get; set; }

        /// <summary>
        /// 寫入數據
        /// </summary>
        public void Insert()
        {
            DbContext.BeginTransaction();
            for (int i = 1; i <= 5; i++)
            {
               var result= DbContext.Insert<UserInfo>(new UserInfo() { UserId = i, UserName = "joyet" + i.ToString(), Age = 110, Email = "joyet" + i.ToString() + "@qq.com" });
            }
            DbContext.CommitTransaction();
        }

        /// <summary>
        /// 刪除所有數據
        /// </summary>
        public void DeleteAll()
        {
            var result = DbContext.Delete<Entity>("", null);
        }

        /// <summary>
        /// 刪除數據
        /// </summary>
        public void Delete()
        {
            var dbFactory = DbContext.DbBuilder.DbFactory;
            var dbOperator = dbFactory.GetDbParamOperator();

            //根據主鍵值刪除數據(此方法會采用SQL參數化)
            var result = DbContext.Delete<Entity>(1);

            ////根據過濾條件Sql和參數刪除數據
            result = DbContext.Delete<Entity>("UserId=1", null); //用法1
            result = DbContext.Delete<Entity>("", new { UserId = 1 }); //用法2(此方法會采用SQL參數化)
            result = DbContext.Delete<Entity>(string.Format("UserId={0}UserId", dbOperator), new { UserId = 1 }); //用法3(此方法會采用SQL參數化)
        }

        /// <summary>
        /// 修改數據
        /// </summary>
        public void Update()
        {
            var dbFactory = DbContext.DbBuilder.DbFactory;
            var dbOperator = dbFactory.GetDbParamOperator();

            var item = DbContext.Query<Entity>(2);

            //根據實體對象修改數據根據用法(此方法會采用SQL參數化)
            var result = DbContext.Update<Entity>(item);

            //根據修改字段參數、主鍵值修改數據用法(此方法會采用SQL參數化)
            result = DbContext.Update<Entity>(new { UserName = "joyet2X" }, 2);

            //根據要修改字段參數、過濾條件Sql、過濾參數修改數據
            result = DbContext.Update<Entity>(new { UserName = "joyet2XX" }, "UserId=2", null);  //用法1
            result = DbContext.Update<Entity>(new { UserName = "joyet2XXX" }, "", new { UserId = 2 }); //用法2(此方法會采用SQL參數化)
            result = DbContext.Update<Entity>(new { UserName = "joyet2XXXX" }, string.Format("UserId={0}UserId", dbOperator), new { UserId = 2 }); //用法3(此方法會采用SQL參數化)
        }

        /// <summary>
        /// 查詢數據
        /// </summary>
        public void Query()
        {
            var dbFactory = DbContext.DbBuilder.DbFactory;
            var dbOperator = dbFactory.GetDbParamOperator();

            //根據主鍵值查詢數據(此方法會采用SQL參數化)
            var data = DbContext.Query<Entity>(3);

            //根據查詢字段、過濾條件Sql、過濾條件參數查詢數據
            var dataList = DbContext.Query<Entity>("UserId,UserName", "UserId=3", null); //用法1
            dataList = DbContext.Query<Entity>("UserId,UserName", "", new { UserId = 3 }); //用法2(此方法會采用SQL參數化)
            dataList = DbContext.Query<Entity>("UserId,UserName", string.Format("UserId={0}UserId", dbOperator), new { UserId = 3 }); //用法3(此方法會采用SQL參數化)

            //根據sql語句、過濾條件參數查詢數據
            dataList = DbContext.Query<Entity>("select * from UserInfo where UserId=3", null); //用法1
            dataList = DbContext.Query<Entity>(string.Format("select * from UserInfo where UserId={0}UserId", dbOperator), new { UserId = 3 }); //用法1(此方法會采用SQL參數化)

            //分頁查詢列表
            var pageDataList = DbContext.QueryPageList<Entity>("UserId,UserName", "UserId", "asc", 10, 1, "UserId=3", null);  //用法1
            pageDataList = DbContext.QueryPageList<Entity>("UserId,UserName", "UserId", "asc", 10, 1, "", new { UserId = 3 });  //用法2(此方法會采用SQL參數化)
            pageDataList = DbContext.QueryPageList<Entity>("UserId,UserName", "UserId", "asc", 10, 1, string.Format("UserId>{0}UserId", dbOperator), new { UserId = 3 });  //用法3(此方法會采用SQL參數化)
        }

        /// <summary>
        /// 執行非查詢操作
        /// </summary>
        public void OrtherNoneQuery()
        {
            var dbFactory = DbContext.DbBuilder.DbFactory;
            var dbOperator = dbFactory.GetDbParamOperator();

            var sql = "delete from UserInfo where UserId=4";
            var paramSql = string.Format("delete from UserInfo where UserId={0}UserId", dbOperator);

            //根據SQL語句、IDbDataParameter參數刪除數據
            var result = DbContext.ExecuteNoneQuery(sql, null); //用法1(無參)

            var dbParams = new List<IDbDataParameter>();
            dbParams.Add(dbFactory.GetDbParam("UserId", 4));
            result = DbContext.ExecuteNoneQuery(paramSql, dbParams); //用法2(有參)

            //根據SQL語句、object參數刪除數據
            result = DbContext.ExecuteNoneQueryWithObjParam(sql); //用法1(無參)
            result = DbContext.ExecuteNoneQueryWithObjParam(paramSql, new { UserId = 4 }); //用法2(有參)
        }

        /// <summary>
        /// 執行查詢操作
        /// </summary>
        public void OrtherQuery()
        {
            var dbFactory = DbContext.DbBuilder.DbFactory;
            var dbOperator = dbFactory.GetDbParamOperator();

            var sql = "select * from UserInfo where UserId=5";
            var paramSql = string.Format("select * from UserInfo where UserId={0}UserId", dbOperator);
            List<Entity> dataList;

            //根據SQL語句、IDbDataParameter參數刪除數據
            using (var dataReader = DbContext.ExecuteReader(sql, null)) //用法1(無參)
            {
                dataList = DbContext.DataReaderToEntityList<Entity>(dataReader);
            }

            var dbParams = new List<IDbDataParameter>();
            dbParams.Add(dbFactory.GetDbParam("UserId", 5));
            using (var dataReader = DbContext.ExecuteReader(paramSql, dbParams)) //用法2(有參)
            {
                dataList = DbContext.DataReaderToEntityList<Entity>(dataReader);
            }

            //根據SQL語句、object參數查詢數據
            using (var dataReader = DbContext.ExecuteReaderWithObjParam(sql, null)) //用法1(無參)
            {
                dataList = DbContext.DataReaderToEntityList<Entity>(dataReader);
            }
            using (var dataReader = DbContext.ExecuteReaderWithObjParam(paramSql, new { UserId = 5 })) //用法2(有參)
            {
                dataList = DbContext.DataReaderToEntityList<Entity>(dataReader);
            }
        }
    }
}

using SmartDb.NetCore;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestSmartDbConsole
{
    public class DbTest:DbBase<UserInfo>
    {
        public DbTest(SqlDbContext dbContext)
        {
            DbContext = dbContext;
        }
    }
}

 

控制台調用示例代碼:

using SmartDb.MySql.NetCore;
using SmartDb.NetCore;
using SmartDb.PostgreSql.NetCore;
using SmartDb.SQLite.NetCore;
using SmartDb.SqlServer.NetCore;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace TestSmartDbConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            TestMySql();
            //TestSqlite();
            Console.ReadLine();
        }

        public static void TestMySql()
        {
            string connectString = "server=localhost;User Id=root;password=123456;Database=testdb;SslMode=None;";
            SqlDbContext db = new MySqlDbContext(connectString);

            //數據執行回調函數
            db.ExecuteDbCallBack = (cmdText, dbParms) => {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.AppendFormat("sql:{0}\n", cmdText);
                if (dbParms != null)
                {
                    foreach (IDbDataParameter param in dbParms)
                    {
                        stringBuilder.AppendFormat("paramName:{0},paramValue:{1}\n", param.ParameterName,param.Value.ToString());
                    }
                }
                stringBuilder.Append("\n");
                Console.Write(stringBuilder.ToString());
            };

            var dbTest = new DbTest(db);
            dbTest.DeleteAll();
            dbTest.Insert();
            dbTest.Delete();
            dbTest.Update();
            dbTest.Query();
            dbTest.OrtherQuery();
            dbTest.OrtherNoneQuery();
        }

        public static void TestSqlServer()
        {
            string connectString = "server=localhost;user id=sa;password=123456;database=testdb;pooling=true;min pool size=5;max pool size=512;connect timeout = 60;";
            SqlDbContext db = new SqlServerDbContext(connectString);

            //數據執行回調函數
            db.ExecuteDbCallBack = (cmdText, dbParms) => {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("sql:" + cmdText);
                if (dbParms != null)
                {
                    foreach (IDbDataParameter param in dbParms)
                    {
                        stringBuilder.Append("paramName:" + param.ParameterName + ",paramValue:" + param.Value.ToString());
                    }
                }
                stringBuilder.Append("\n\n");
                Console.Write(stringBuilder.ToString());
            };

            var dbTest = new DbTest(db);
            dbTest.DeleteAll();
            dbTest.Insert();
            dbTest.Delete();
            dbTest.Update();
            dbTest.Query();
            dbTest.OrtherQuery();
            dbTest.OrtherNoneQuery();
        }

        public static void TestSqlite()
        {
             string dbPath = "f:\\testdb.sqlite";
             string connectString = "Data Source=f:\\testdb.sqlite;Pooling=true;FailIfMissing=false;";
            if (File.Exists(dbPath))
            {
                File.Delete(dbPath);
            }
            SqlDbContext db = new SQLiteDbContext(connectString);

            //數據執行回調函數
            db.ExecuteDbCallBack = (cmdText, dbParms) => {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("sql:" + cmdText);
                if (dbParms != null)
                {
                    foreach (IDbDataParameter param in dbParms)
                    {
                        stringBuilder.Append("paramName:" + param.ParameterName + ",paramValue:" + param.Value.ToString());
                    }
                }
                stringBuilder.Append("\n\n");
                Console.Write(stringBuilder.ToString());
            };

            //var sql = "create  table UserInfo(UserId int identity(1,1) primary key,UserName  varchar(50),Age int,Email varchar(50))";
            var sql = "create  table UserInfo(UserId int  primary key,UserName  varchar(50),Age int,Email varchar(50))";
            db.ExecuteNoneQuery(sql, null);

            var dbTest = new DbTest(db);
            dbTest.DeleteAll();
            dbTest.Insert();
            dbTest.Delete();
            dbTest.Update();
            dbTest.Query();
            dbTest.OrtherQuery();
            dbTest.OrtherNoneQuery();
        }

        public static void TestPostgreSql()
        {
            string connectString = "server=192.168.58.131;port=5432;user id=xiaozhang1;password=123456;database=testdb;";
            SqlDbContext db = new PostgreSqlDbContext(connectString);

            //數據執行回調函數
            db.ExecuteDbCallBack = (cmdText, dbParms) => {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("sql:" + cmdText);
                if (dbParms != null)
                {
                    foreach (IDbDataParameter param in dbParms)
                    {
                        stringBuilder.Append("paramName:" + param.ParameterName + ",paramValue:" + param.Value.ToString());
                    }
                }
                stringBuilder.Append("\n\n");
                Console.Write(stringBuilder.ToString());
            };

            var dbTest = new DbTest(db);
            dbTest.DeleteAll();
            dbTest.Insert();
            dbTest.Delete();
            dbTest.Update();
            dbTest.Query();
            dbTest.OrtherQuery();
            dbTest.OrtherNoneQuery();
        }
     }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM