国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

SunSonic 3.0 ORM開源框架的學習

2019-11-17 03:00:07
字體:
來源:轉載
供稿:網友
SunSonic 3.0 ORM開源框架的學習

SubSonic 3.0簡介

接觸到SubSonic3.0 ORM框架是看了AllEmpty大神的從零開始編寫自己的C#框架(鏈接在此)系列的隨筆接觸到的,本文章學習內容源于AllEmpty大神。

SubSonic就是一個ORM開源框架。作者是Robe Conery,用C#語言寫的。其中包含了T4模板可以快速生成數據層實體類,這是一個實用的快速開發框架。讓開發人員原理SQL語句的拼接,專注于業務邏輯的實現。SubSonic 3.0支持MsSql、MySQL與SQLite三種數據庫,對數據庫操作靈活,對生成的SQL語句會自動進行優化,雖然是ORM框架,但在性能上并沒有太大的損失。它上手容易,是一個非常棒的ORM開發框架。

我使用過程中的切身體會是:一次編寫,終身使用。將自己需要的功能寫在T4模板,利用T4模板強大的自定義功能可以迅速而準確地生成自己的實體類。可以Select類、實體類查詢,支持LINQ,支持聚合函數,支持存儲過程,可以使用Distinct關鍵字。(部分功能AllEmpty添加,我使用的是他的修改版)。

SubSonic 3.0配置

創建項目(整個解決方案下載鏈接在本文后面)并將SubSonic.Core和Castle.dll引用后,添加SubSonic文件夾。此時,整個項目的文件結構如下所示:

image

然后需要配置一下數據庫連接,這里介紹的是MSSQLSERVER。打開SubSonicTest項目中SubSonic文件夾中的Setting.ttinclude,該文件位置如下圖紅框所示:

image

打開該文件在開始找到如下所示的內容:

image

上圖紅色箭頭指向的數據庫連接字符串對應Web.config配置文件中的ConnectionStrings的名稱,數據名稱對應與ConnectString中的數據庫。ConnectionStrings配置方式(以我的為例)如下圖紅框內容所示:

image

上圖中的數據庫連接字符串名稱一定要和Web.config配置文件中的保持一致,否則會出現錯誤。確保沒有問題后,按如下所示使用T4模板生成數據庫實體類:

image

生成的實體類如下所示:

image

SubSonic 3.0簡單實用

在SubSonicTest項目中新建一個aspx窗體文件,這里名稱是Test.aspx。對應的cs后臺文件代碼如下所示:

using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text;using SubSonic.Linq.Structure;using SubSonic.Query;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Solution.Dataaccess.DataModel;namespace SubSonicTest{    public partial class Test : System.Web.UI.Page    {        PRotected void Page_Load(object sender, EventArgs e)        {                       //新增記錄            var branch1 = new Branch            {                DeptCode = SPs.P_Branch_GetMaxBranchDeptCode(2, 1).ExecuteScalar() + "",                Name = "網絡部",                Comment = "網絡問題解決中心",                ParentId = 1,                Sort = 8,                Depth = 2            };                        //保存至數據庫            branch1.Save();            //打印出來S            PrintImpInfo("記錄添加成功,新增Id="+branch1.Id);            //查詢剛剛添加的記錄并修改            var branchModel = Branch.SingleOrDefault(x => x.Comment == "網絡問題解決中心");            branchModel.Name = "售后服務部";            branchModel.Save();                        //刪除剛才添加的記錄            Branch.Delete(x => x.Comment == "網絡問題解決中心");            if (Branch.Exists(x => x.Comment == "網絡問題解決中心"))            {                PrintImpInfo("存在");            }            else            {                PrintImpInfo("不存在");            }                        //查詢Branch下所有的數據            var list = Branch.All();            foreach (var branch in list)            {                PrintImpInfo(string.Format("名字={0},評論={1},添加日期={2}", branch.Name, branch.Comment, branch.AddDate.ToString("yyyy-MM-dd HH:mm:ss")));            }                         // //使用類實體附帶的函數查詢            PrintImpInfo("使用類實體附帶的函數查詢");            var braanchList = Branch.Find(x => x.Id > 0);            foreach (var branch in braanchList)            {                PrintImpInfo(branch.Id.ToString());                PrintImpInfo(branch.Name);                PrintImpInfo(branch.AddDate.ToString("yyyy-MM-dd HH:mm:ss"));            }            PrintImpInfo("------------------------");            //分頁功能,獲取第2頁記錄(每頁5條記錄)            PrintImpInfo("獲取第2頁記錄(每頁5條記錄");            var il = Branch.GetPaged("Id Desc", 2, 4);            foreach (var branch in il)            {                PrintImpInfo(branch.Id.ToString());                PrintImpInfo(branch.Name);                PrintImpInfo(branch.Sort.ToString());                PrintImpInfo(branch.Depth.ToString());                PrintImpInfo(branch.ParentId.ToString());                PrintImpInfo(branch.AddDate.ToString("yyyy-MM-dd HH:mm:ss"));            }            PrintImpInfo("------------------------");            //使用數據庫名+DB可以直接調用聚合函數            PrintImpInfo("數據庫名+DB可以直接調用聚合函數");            var db = new SubSonicTestDB();            //平均值            PrintImpInfo("平均值"+db.Avg<Position>(x=>x.Id).Where<Position>(x=>x.Id<12).ExecuteScalar()+" ");            //計算數量            PrintImpInfo("計算數量" + db.Count<Position>(x => x.Id).ExecuteScalar() + " ");            //計算合計量            PrintImpInfo("計算合計量" + db.Sum<Position>(x => x.Id).ExecuteScalar() + " ");            //最大值            PrintImpInfo("最大值" + db.Max<Position>(x => x.Id).ExecuteScalar() + " ");            //最小值            PrintImpInfo("最小值" + db.Min<Position>(x => x.Id).ExecuteScalar() + " ");            //存儲過程調用方法            var obj = SPs.P_Branch_GetMaxBranchDeptCode(1,0).ExecuteScalar();            PrintImpInfo("存儲過程調用obj="+obj);            //Linq查詢方式            PrintImpInfo("Linq查詢方式");            var query = new Query<Branch>(db.provider);            var posts = from p in query                where p.DeptCode.StartsWith("0101")                select p;            foreach (var branch in posts)            {                PrintImpInfo(branch.ToString());            }            query = db.GetQuery<Branch>();            posts = from p in query                where p.Id > 3 && p.Id < 6                select p;            foreach (var branch in posts)            {                PrintImpInfo(branch.ToString());            }            var newBranchList = query.ToList<Branch>();            foreach (var branch in newBranchList)            {                PrintImpInfo(branch.ToString());            }            //Linq多表關聯查詢方式            PrintImpInfo("Linq多表關聯查詢方式");            var query1 = from b in Position.All()                join p in Branch.All() on b.Branch_Id equals p.Id                where p.DeptCode == "0101"                select p;            foreach (var branch in query1)            {                PrintImpInfo(branch.ToString());            }                    }        /// <summary>        /// 在Debug模式下打印信息到輸出窗口中        /// </summary>        /// <param name="info"></param>        private void PrintImpInfo(string info)        {            System.Diagnostics.Debug.WriteLine(info);        }           }}

加入斷點調試(要求Debug下),即可輸出打印出的內容,如下所示(打開輸出窗口的快捷鍵是Ctrl+Alt+O):

image

感謝AllEmpty大神讓我認識到了SubSonic這個ORM框架,么么噠。

整個解決方案在下面:

點此下載


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉林省| 托克逊县| 吉林省| 阜宁县| 菏泽市| 滨州市| 彭州市| 宁城县| 汝南县| 衡山县| 宜都市| 雅江县| 旬阳县| 黔南| 万源市| 嘉兴市| 临洮县| 西乌珠穆沁旗| 诸城市| 色达县| 友谊县| 肃北| 武陟县| 乌鲁木齐县| 勃利县| 安福县| 凤凰县| 全椒县| 和林格尔县| 西昌市| 邵阳县| 济源市| 共和县| 万荣县| 达州市| 谷城县| 长泰县| 仙居县| 舟曲县| 镇平县| 泸水县|