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(); } } }