Dapper.net的使用

最近項目比較忙,很久沒有更新簡書了瑰钮,周末抽個時間冒滩,將最近項目中用到的一些框架進行整理。

Dapper.net是一個開源的ORM框架浪谴,使用方法非常簡單开睡,速度也很快。

使用方法很簡單苟耻,如下篇恒,可以將查詢出來的結果轉換成List實體,很方便凶杖。
<pre>
List<ModelBase> list;
using (var conn = GetSqlConnection())
{
list = conn.Query<ModelBase>("select * from t").ToList();
}
</pre>

在項目的實際使用過程中胁艰,我對它進行了一些簡單的封裝,網上已經有很多的開源DapperNet的擴展智蝠,不過我還是自己實現(xiàn)了一個腾么。有Query,UPdate杈湾,Add和Execute方法解虱。
<pre>
public class DapperNetExt
{

    private string _SqlConnString;
    /// <summary>  
    /// 獲取連接字符串  
    /// </summary>  
    /// <returns></returns>  
    protected IDbConnection GetSqlConnection()
    {

        if (string.IsNullOrEmpty(_SqlConnString))
        {
            _SqlConnString = ConfigurationManager.AppSettings["SqlConn"];
        }

        return new SqlConnection(_SqlConnString);
    }

    /// <summary>
    /// 查詢
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="query"></param>
    /// <returns></returns>
    protected List<T> Query<T>(string query)
    {
        List<T> list;
        using (var conn = GetSqlConnection())
        {
            list = conn.Query<T>(query).ToList();
        }
        return list;
    }

    protected List<T> Query<T>(string query, DynamicParameters dp, CommandType commandtype)
    {
        List<T> list;
        using (var conn = GetSqlConnection())
        {
            list = conn.Query<T>(query, dp, null, true, null, commandtype).ToList();
        }
        return list;
    }

    protected DataSet Query(string query)
    {
        DataSet ds = new DataSet();
        using (var conn = GetSqlConnection())
        {
            SqlConnection sqlconn = conn as SqlConnection;
            SqlDataAdapter da = new SqlDataAdapter(query, sqlconn);
            da.Fill(ds);
        }
        return ds;
    }

    protected object ExecuteScalar(string query)
    {
        object obj;
        using (var conn = GetSqlConnection())
        {
            obj = conn.ExecuteScalar(query);
        }
        return obj;
    }

    /// <summary>
    /// 執(zhí)行
    /// </summary>
    /// <param name="sql"></param>
    /// <returns></returns>
    protected int Execute(string sql)
    {
        int result = 0;
        using (var conn = GetSqlConnection())
        {
            result = conn.Execute(sql);
        }

        return result;
    }

    protected int Execute(string sql, object obj)
    {
        int result = 0;
        using (var conn = GetSqlConnection())
        {
            result = conn.Execute(sql, obj);
        }

        return result;
    }

    protected int Add<T>(T obj, string keyFiled = null)
    {
        return Add<T>(new List<T>() { obj }, keyFiled);
    }

    protected int Add<T>(List<T> obj, string keyFiled = null)
    {

        Type t = obj.FirstOrDefault().GetType();
        string tableName = t.Name;
        PropertyInfo[] ps = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);

        string tmpsql = " insert into " + tableName;

        string tmpSqlPara = " ( ";
        string tmpSqlValue = " values ( ";

        foreach (var item in ps)
        {
            if (keyFiled != null)
            {
                if (item.Name == keyFiled)
                {
                    continue;
                }
            }
            tmpSqlPara += item.Name + ",";
            tmpSqlValue += "@" + item.Name + ",";
        }

        tmpSqlPara = tmpSqlPara.Substring(0, tmpSqlPara.Length - 1);
        tmpSqlPara += " ) ";

        tmpSqlValue = tmpSqlValue.Substring(0, tmpSqlValue.Length - 1);
        tmpSqlValue += " ) ";

        //if (keyFiled != null)
        //{
        tmpsql += tmpSqlPara;
        //}
        tmpsql += tmpSqlValue;

        return Execute(tmpsql, obj);
    }

    protected int Update<T>(T obj, string keyFiled)
    {
        return Update<T>(new List<T>() { obj }, keyFiled);
    }

    protected int Update<T>(List<T> obj, string keyFiled)
    {

        Type t = obj.FirstOrDefault().GetType();
        string tableName = t.Name;
        PropertyInfo[] ps = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);

        string tmpsql = " update " + tableName;

        string tmpSqlPara = " set  ";
        string tmpSqlwhere = " where " + keyFiled + "=@" + keyFiled;

        foreach (var item in ps)
        {
            if (keyFiled != null)
            {
                if (item.Name == keyFiled)
                {
                    continue;
                }
            }
            tmpSqlPara += item.Name + "=@" + item.Name + ",";
        }

        tmpSqlPara = tmpSqlPara.Substring(0, tmpSqlPara.Length - 1);


        tmpsql += tmpSqlPara + tmpSqlwhere;

        return Execute(tmpsql, obj);
    }
}

</pre>

使用的時候,只需寫一行代碼就可以了漆撞。
<pre>
List<ModelBase> list = Query<ModelBase>("select * from t");
</pre>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末殴泰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叫挟,更是在濱河造成了極大的恐慌艰匙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抹恳,死亡現(xiàn)場離奇詭異员凝,居然都是意外死亡,警方通過查閱死者的電腦和手機奋献,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門健霹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瓶蚂,你說我怎么就攤上這事糖埋。” “怎么了窃这?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵瞳别,是天一觀的道長。 經常有香客問我,道長祟敛,這世上最難降的妖魔是什么疤坝? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮馆铁,結果婚禮上跑揉,老公的妹妹穿的比我還像新娘。我一直安慰自己埠巨,他們只是感情好历谍,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辣垒,像睡著了一般望侈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乍构,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天甜无,我揣著相機與錄音,去河邊找鬼哥遮。 笑死岂丘,一個胖子當著我的面吹牛,可吹牛的內容都是我干的眠饮。 我是一名探鬼主播奥帘,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仪召!你這毒婦竟也來了寨蹋?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扔茅,失蹤者是張志新(化名)和其女友劉穎已旧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體召娜,經...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡运褪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了玖瘸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秸讹。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖雅倒,靈堂內的尸體忽然破棺而出璃诀,到底是詐尸還是另有隱情,我是刑警寧澤蔑匣,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布劣欢,位于F島的核電站棕诵,受9級特大地震影響,放射性物質發(fā)生泄漏氧秘。R本人自食惡果不足惜年鸳,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丸相。 院中可真熱鬧,春花似錦彼棍、人聲如沸灭忠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弛作。三九已至,卻和暖如春华匾,著一層夾襖步出監(jiān)牢的瞬間映琳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工蜘拉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萨西,地道東北人。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓旭旭,卻偏偏與公主長得像谎脯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子持寄,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內容