Dos.ORM使用教程

来源:http://www.cnblogs.com/BookCode/archive/2016/03/18/5292859.html
-Advertisement-
Play Games

Dos.ORM(原Hxj.Data)於2009年發佈,併發布實體生成工具。在開發過程參考了多個ORM框架,特別是NBear,MySoft、EF、Dapper等。吸取了他們的一些精華,加入自己的新思想。該組件已在上百個成熟企業項目中應用 首先·在 App.config文件中配置連接資料庫字元串。或者在


Dos.C#.Net使用

  Dos.ORM(原Hxj.Data)於2009年發佈,併發布實體生成工具。在開發過程參考了多個ORM框架,特別是NBear,MySoft、EF、Dapper等。吸取了他們的一些精華,加入自己的新思想。該組件已在上百個成熟企業項目中應用

為什麼選擇Dos.ORM(原Hxj.Data)?

  • 上手簡單,0學習成本。使用方便,按照sql書寫習慣編寫C#.NET代碼。功能強大
  • 高性能(與Dapper媲美,接近手寫Sql)
  • 體積小(不到150kb,僅一個dll)
  • 完美支持Sql Server(2000至最新版),MySql,Oracle,Access,Sqlite等資料庫
  • 支持大量Lambda表達式寫法,國產ORM支持度最高,開源中國ORM排行前三
  • 不需要像NHibernate的XML配置,不需要像EF的各種資料庫連接驅動
  • 眾多成熟企業軟體、互聯網項目已應用此框架
  • 遵循MIT開源協議,除不允許改名,其它隨意定製修改
  • Dos團隊持續更新升級,任何Bug反饋都會立即得到解決

 

  首先·在 App.config文件中配置連接資料庫字元串。或者在程式中指定

1     <connectionStrings>
2         <add name="School" connectionString="Data Source=.;Initial Catalog=School;User ID=sa;Pwd=123;"></add>
3     </connectionStrings>

然後,進行增刪改操作。如下:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 using Hxj.Data;
  7 using Hxj.Data.Sqlite;
  8 using System.Data;
  9 
 10 namespace cn.School
 11 {
 12     class Test
 13     {
 14         static void Main(string[] args)
 15         {
 16 
 17             //    <connectionStrings>
 18             //<add name="School" connectionString="Data Source=.;Initial Catalog=School;User ID=sa;Pwd=123;"></add>
 19             //</connectionStrings>
 20 
 21             //不同的資料庫可構造不同的DbSession    DbSession(connectionStrings節點的name)
 22             //DbSession dbs = new DbSession("School");
 23             DbSession dbs2 = new DbSession(DatabaseType.SqlServer, "Data Source=.;Initial Catalog=School;User ID=sa;Pwd=123;");
 24 
 25             //TestSelDB();
 26 
 27             //addTestDB();
 28 
 29             //Updata();
 30 
 31             //DelData();
 32 
 33             //sqlFrom();
 34 
 35             assistmethod();
 36         }
 37 
 38         /// <summary>
 39         /// 查詢操作
 40         /// </summary>
 41         public static void TestSelDB()
 42         {
 43             //查詢Student表中第一條數據並返回實體,代碼如下。
 44             Student st = DbSession.Default.From<Student>()
 45                 //.Select(Products._.ProductID) //查詢返回ProductID欄位
 46                 //.GroupBy(Products._.CategoryID.GroupBy && Products._.ProductName.GroupBy)//按照CategoryID,ProductName分組
 47                 //.InnerJoin<Suppliers>(Suppliers._.SupplierID == Products._.SupplierID)//關聯Suppliers表   --CrossJoin   FullJoin  LeftJoin  RightJoin 同理
 48                 //.OrderBy(Products._.ProductID.Asc)//按照ProductID正序排序
 49                 //.Where((Products._.ProductName.Contain("apple") && Products._.UnitPrice > 1) || Products._.CategoryID == 2)//設置條件ProductName包含”apple”並且UnitPrice>1  或者CategoryID =2
 50                 //.UnionAll(DbSession.Default.From<Products>().Select(Products._.ProductID))//union all查詢
 51                 //.Distinct() // Distinct
 52                 //.Top(5)   //讀取前5條
 53                 //.Page(10, 2)//分頁返回結果 每頁10條返回第2頁數據
 54                 //.ToDataSet();   //返回DataSet
 55                 //.ToDataReader(); //返回IDataReader
 56                 //.ToDataTable(); //返回DataTable
 57                 //.ToScalar();  //返回單個值    
 58             .ToFirst();
 59 
 60             //分欄位查詢
 61             DbSession.Default.From<Student>()
 62                 .Select(Student._.Stu_ID, Student._.Stu_name)
 63                 .ToDataTable();
 64 
 65             //分欄位查詢取別名
 66             DbSession.Default.From<Student>()
 67                 .Select(Student._.Stu_ID, Student._.Stu_name.As("pname"))
 68                 .ToDataTable();
 69 
 70             //排序倒敘排列
 71             DataTable dt = DbSession.Default.From<Student>().OrderBy(Student._.Stu_ID.Desc).ToDataTable();
 72 
 73         }
 74 
 75         /// <summary>
 76         /// 模糊查詢
 77         /// 子查詢
 78         /// in 查詢
 79         /// not iN查詢
 80         /// </summary>
 81         public static void demoSelet()
 82         {
 83 
 84             //Contain完全模糊查詢
 85             DbSession.Default.From<Student>().Where(Student._.Stu_ID.Contain(41500));
 86 
 87             //查找Stu_ID列中所有以41500開頭的。
 88             DbSession.Default.From<Student>().Where(Student._.Stu_ID.BeginWith(41500));
 89 
 90             //查找Stu_ID列中所有以41500結尾的。
 91             DbSession.Default.From<Student>().Where(Student._.Stu_ID.EndWith(41500));
 92 
 93             //in 查詢
 94             DbSession.Default.From<Student>()
 95                 .Where(Student._.Stu_ID.SelectIn(1, 2, 3))
 96                 .ToList();
 97 
 98             //not in查詢
 99             DbSession.Default.From<Student>()
100                 .Where(Student._.Stu_ID.SelectNotIn<int>(1, 2, 3))
101                 .ToList();
102 
103             //子查詢
104 
105             //SubQueryEqual                =
106             //SubQueryNotEqual            <>
107             //SubQueryLess                <
108             //SubQueryLessOrEqual        <=
109             //SubQueryGreater            >
110             //SubQueryGreaterOrEqual    >=
111             //SubQueryIn                in
112             //SubQueryNotIn                not in
113             DbSession.Default.From<Student>()
114                 .Where(Student._.Stu_ID
115                 .SubQueryEqual(DbSession.Default.From<Student>().Where(Student._.Stu_ID == "Produce").Select(Student._.Stu_ID).Top(1)))
116                 .ToList();
117         }
118 
119         /// <summary>
120         /// 聯合查詢
121         /// </summary>
122         public static void likeSel()
123         {
124             //InnerJoin        inner join
125             //LeftJoin        left join
126             //RightJoin        right join
127             //CrossJoin        cross join
128             //FullJoin        full join
129             //Union            union
130             //UnionAll        union all
131             DbSession.Default.From<Student>()
132                 .InnerJoin<Gread>(Student._.gr_id == Gread._.gr_id)
133                 .ToDataTable();
134             //聯合查詢帶條件
135             DbSession.Default.From<Student>()
136                 .LeftJoin<Gread>(Student._.gr_id == Gread._.gr_id)
137                 .Where(Student._.gr_id == 1)
138                 .ToDataTable();
139 
140             //這兩個是兩個結果的合集,union會區分結果排除相同的,union all 則直接合併結果集合。
141 
142             DbSession.Default.From<Student>().Where(Student._.gr_id == 4522)
143                 .UnionAll(DbSession.Default.From<Gread>().Where(Gread._.gr_id == 1))
144                 .ToList();
145         }
146 
147         /// <summary>
148         /// 增加操作
149         /// </summary>
150         public static void addTestDB()
151         {
152             //新建一個實體
153             Student stu = new Student();
154             stu.Stu_name = "小黑";
155             stu.stu_phon = "1254555";
156             stu.stu_Sex = "";
157             stu.stu_Age = 25;
158             stu.gr_id = 1;
159 
160             //開啟修改  (開啟修改後的添加操作將只insert賦值過的欄位)
161             stu.Attach();
162 
163             //返回值  如果有自增長欄位,則返回自增長欄位的值
164             int result = DbSession.Default.Insert<Student>(stu);
165 
166             //將插入的數據查詢出來
167             List<Student> listStu = DbSession.Default.From<Student>().Where(Student._.Stu_ID == result).ToList();
168         }
169 
170         /// <summary>
171         /// 修改操作
172         /// </summary>
173         public static void Updata()
174         {
175             //先查詢一個Student對象
176             Student stu = DbSession.Default.From<Student>().Where(Student._.Stu_ID.Contain(41500)).ToFirst();
177 
178             //開啟修改   (修改操作之前 必須執行此方法)
179             stu.Attach();
180 
181             stu.Stu_name = "王五";
182             List<ModifyField> list = stu.GetModifyFields();
183             //清除修改記錄   (清除後更新操作無效)
184             //stu.ClearModifyFields();
185             //返回0表示更新失敗 組件有事務會自動回滾  
186             //返回1表示更新成功   
187             //更新成功返回值就是受影響的條數
188             int num = DbSession.Default.Update<Student>(stu);
189 
190 
191             //簡單的修改方法,修改一個值的時候使用
192             //int nums = DbSession.Default.Update<Student>(Student._.Stu_name, "九九", Student._.Stu_ID == 41501);
193 
194 
195             //修改多個值的時候
196             //Dictionary<Field, object> st = new Dictionary<Field, object>();
197             //st.Add(Student._.stu_Sex, "男");
198             //st.Add(Student._.Stu_name, "小徐");
199             //int returnvalue = DbSession.Default.Update<Student>(st, Student._.Stu_ID == 41501);
200         }
201 
202 
203         /// <summary>
204         /// 刪除操作
205         /// </summary>
206         public static void DelData()
207         {
208 
209             int returnValue = DbSession.Default.Delete<Student>(Student._.Stu_ID == 41504);
210             //與上面等效的刪除語句
211             //int returnvalue = DbSession.Default.Delete<Student>(2);
212 
213 
214             //刪除一個對象
215             //Student stu = DbSession.Default.From<Student>().ToFirst();
216             //int returnvalue = DbSession.Default.Delete<Student>(stu);
217         }
218 
219 
220         /// <summary>
221         /// 使用SQL語句查詢
222         /// </summary>
223         public static void sqlFrom()
224         {
225 
226             //直接使用SQL語句查詢
227             DataTable dt = DbSession.Default.FromSql("select * from Student").ToDataTable();
228 
229             //參數化SQL語句
230             //DataTable dt1 = DbSession.Default.FromSql("select * from Student where stu_id=id").AddInParameter("id", DbType.Int32, 41500).ToDataTable();
231 
232             //多個參數查詢
233             //DataTable dt2 = DbSession.Default.FromSql("select * from Student where stu_id=id or stu_name=name")
234             //    .AddInParameter("id", DbType.Int32, 41500)
235             //    .AddInParameter("name", DbType.String, "張三")
236             //    .ToDataTable();
237         }
238 
239 
240         /// <summary>
241         /// 存儲過程
242         /// </summary>
243         public static void ProcDemo()
244         {
245             //"ProcName"就是存儲過程名稱。
246             DataTable dt = DbSession.Default.FromProc("ProcName").ToDataTable();
247 
248 
249             //執行帶參數的存儲過程
250             DataTable dt1 = DbSession.Default.FromProc("ProcName")
251                 .AddInParameter("parameterName", DbType.DateTime, "1995-01-01")
252                 .AddInParameter("parameterName1", DbType.DateTime, "1996-12-01")
253                 .ToDataTable();
254 
255 
256 
257             //AddInputOutputParameter  方法添加輸入輸出參數 
258             //AddOutParameter  方法添加輸出參數
259             //AddReturnValueParameter  方法添加返回參數
260 
261             ProcSection proc = DbSession.Default.FromProc("testoutstore")
262             .AddInParameter("in1", System.Data.DbType.Int32, 1)
263             .AddOutParameter("out2", System.Data.DbType.String, 100);
264             proc.ExecuteNonQuery();
265 
266             Dictionary<string, object> returnValue = proc.GetReturnValues();
267 
268             foreach (KeyValuePair<string, object> kv in returnValue)
269             {
270                 Console.WriteLine("ParameterName:" + kv.Key + "    ;ReturnValue:" + Convert.ToString(kv.Value));
271             }
272         }
273 
274         /// <summary>
275         /// 輔助方法
276         /// </summary>
277         public static void assistmethod()
278         {
279             //返回  Student._.Stu_name == "小黑"  的Student._.gr_id合計。
280             int? sum = (int?)DbSession.Default.Sum<Student>(Student._.gr_id, Student._.Stu_name == "小黑");
281 
282             //返回  Student._.Stu_ID == 2  的Stu_ID平均值。
283             DbSession.Default.Avg<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
284 
285             //返回  Student._.Stu_ID == 2  的Stu_ID個數。
286             DbSession.Default.Count<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
287 
288             //返回  Student._.Stu_ID == 2  的Stu_ID最大值。
289             DbSession.Default.Max<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
290 
291             //返回  Student._.Stu_ID == 2  的Stu_ID最小值。
292             DbSession.Default.Min<Student>(Student._.Stu_ID, Student._.Stu_ID == 2);
293 
294         }
295 
296 
297         /// <summary>
298         /// 添加事務處理
299         /// </summary>
300         public static void TestTrans()
301         {
302 
303             DbTrans trans = DbSession.Default.BeginTransaction();
304             try
305             {
306                 DbSession.Default.Update<Student>(Student._.Stu_name, "apple", Student._.Stu_ID == 1, trans);
307                 DbSession.Default.Update<Student>(Student._.Stu_name, "egg", Student._.Stu_ID == 2, trans);
308                 trans.Commit();
309             }
310             catch
311             {
312                 trans.Rollback();
313             }
314             finally
315             {
316                 trans.Close();
317             }
318 
319             //存儲過程中的事務   (ProcName表示存儲過程名稱)
320             DbTrans trans1 = DbSession.Default.BeginTransaction();
321             DbSession.Default.FromProc("ProcName").SetDbTransaction(trans);
322 
323         }
324 
325 
326         /// <summary>
327         /// 批處理
328         /// </summary>
329         public static void batingTest()
330         {
331             //預設是10條sql執行一次。也可以自定義。
332             //DbBatch batch = DbSession.Default.BeginBatchConnection(20)
333 
334             using (DbBatch batch = DbSession.Default.BeginBatchConnection())
335             {
336                 batch.Update<Student>(Student._.Stu_name, "apple", Student._.Stu_ID == 1);
337                 batch.Update<Student>(Student._.Stu_name, "pear", Student._.Stu_ID == 2);
338                 //執行batch.Execute(),就會將之前的sql腳本先提交。
339                 //batch.Execute();
340                 batch.Update<Student>(Student._.Stu_name, "orange", Student._.Stu_ID == 3);
341             }
342         }
343 
344 
345         /// <summary>
346         /// 緩存
347         /// </summary>
348         public static void SetCacheTimeOutDemo() {
349 
350             //SetCacheTimeOut設置查詢的緩存為180秒
351             DbSession.Default.From<Student>().Where(Student._.Stu_ID == 1).SetCacheTimeOut(180).ToFirst();
352 
353 
354 
355         }
356 
357 
358 
359     }
360 }

  工具生成的實體類如下:

//------------------------------------------------------------------------------
// <auto-generated>
//     此代碼由工具生成。
//     運行時版本:2.0.50727.5485
//     Support: http://www.cnblogs.com/huxj
//     對此文件的更改可能會導致不正確的行為,並且如果
//     重新生成代碼,這些更改將會丟失。
// </auto-generated>
//------------------------------------------------------------------------------


using System;
using System.Data;
using System.Data.Common;
using Hxj.Data;
using Hxj.Data.Common;

namespace cn.School
{

    /// <summary>
    /// 實體類Student 。(屬性說明自動提取資料庫欄位的描述信息)
    /// </summary>
    [Serializable]
    public class Student : Entity 
    {
        public Student():base("Student") {}

        #region Model
        private int _Stu_ID;
        private string _Stu_name;
        private int? _stu_Age;
        private string _stu_Sex;
        private string _stu_phon;
        private int _gr_id;
        /// <summary>
        /// 
        /// </summary>
        public int Stu_ID
        {
            get{ return _Stu_ID; }
            set
            {
                this.OnPropertyValueChange(_.Stu_ID,_Stu_ID,value);
                this._Stu_ID=value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public string Stu_name
        {
            get{ return _Stu_name; }
            set
            {
                this.OnPropertyValueChange(_.Stu_name,_Stu_name,value);
                this._Stu_name=value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public int? stu_Age
        {
            get{ return _stu_Age; }
            set
            {
                this.OnPropertyValueChange(_.stu_Age,_stu_Age,value);
                this._stu_Age=value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public string stu_Sex
        {
            get{ return _stu_Sex; }
            set
            {
                this.OnPropertyValueChange(_.stu_Sex,_stu_Sex,value);
                this._stu_Sex=value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public string stu_phon
        {
            get{ return _stu_phon; }
            set
            {
                this.OnPropertyValueChange(_.stu_phon,_stu_phon,value);
                this._stu_phon=value;
            }
        }
        /// <summary>
        /// 
        /// </summary>
        public int gr_id
        {
            get{ return _gr_id; }
            set
            {
                this.OnPropertyValueChange(_.gr_id,_gr_id,value);
                this._gr_id=value;
            }
        }
        #endregion

        #region Method
        /// <summary>
        /// 獲取實體中的標識列
        /// </summary>
        public override Field GetIdentityField()
        {
            return _.Stu_ID;
        }
        /// <summary>
        /// 獲取實體中的主鍵列
        /// </summary>
        public override Field[] GetPrimaryKeyFields()
        {
            return new Field[] {
                _.Stu_ID};
        }
        /// <summary>
        /// 獲取列信息
        /// </summary>
        public override Field[] GetFields()
        {
            return new Field[] {
                _.Stu_ID,
                _.Stu_name,
                _.stu_Age,
                _.stu_Sex,
                _.stu_phon,
                _.gr_id};
        }
        /// <summary>
        /// 獲取值信息
        ///<

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • VS2005代碼編輯器的展開和摺疊代碼確實很方便和實用。以下是展開代碼和摺疊代碼所用到的快捷鍵,很常用: Ctrl + M + O: 摺疊所有方法 Ctrl + M + M: 摺疊或者展開當前方法 Ctrl + M + L: 展開所有方法 解決VS2010中工具箱的的不見的問題: 按快捷鍵Ctrl+
  • 先上代碼:
  • 1、MVC的前臺頁面編譯完之後,也會生成一個前臺頁面類。在前天頁面中加入這段代碼this.GetType().Assembly.GetLocation()得到當前類所在的程式集,可以查看其所在的程式,會發現,如果是若類型視圖其繼承的是WebViewPage<object>,而強類型則是機車WebVi
  • 對於一個企業級項目開發,模塊化是非常重要的。 預設Mvc框架的AreaRegistration對模塊化開發已經支持比較好了,還有必要擴展嗎?還能擴展嗎? 本文中的慄子是使用.net4.0、Mvc4.0及Unity2.0(企業庫4.0)的,提供完整源碼。 本分區擴展集成了IoC和分區DI(依賴註入)及
  • NuGet的入門實用教程
  • 協議是指電腦通信網路中兩台電腦之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,也就是說一個客戶端和伺服器端請求和應答的標準(基於TCP/IP)。http協議是無狀態的! 目前我們使用的HTTP/1.1版本。 當在瀏覽器地址欄輸入一個url網址(或者IP地址)訪問
  • C#中的介面 在C#中介面是一組公共方法或屬性的集合。介面可以被其他介面或是類繼承,但不能被實例化。 1、介面中包含的屬性和方法都是公共的,不是繼承或是私有的。事實上,在C#中定義介面中的成員時,不允許顯示指定介面成員的可訪問性,而是自動預設為公共的。 2、介面中只能包含普通方法或屬性,而不能包含其
  • C#中的結構 在C#中用關鍵字struct定義一個結構。從語法上來看,結構與類很相似,在類中可以包含的成員幾乎都可以包含在結構中。例如,結構中可以定義欄位、方法、構造函數、屬性、事件等。定義結構語法如下: 訪問修飾符 struct 結構名 { //結構成員 } 在結構中不能定義預設構造函數(即不帶參
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...