小弟剛入code這條道路,目前是自學階段,對於現今網頁的架構請各位前輩指教。
之前自學我是使用EF來去撈DB的資料,可是公司的前輩要我用dapper就好,畢竟公司的系統是小系統也是利用dapper的方式做(我知道EF跟dapper的比較與優缺點,在此不多討論),只是我上網去找尋相關資料,可惜google技術沒有很好,找不到相關的範例可以練習,只是懂了相關觀念之後,卻無從下手。小弟愚鈍,想問各位前輩我的觀念是否錯誤?(我利用會員註冊系統說明)
Browser端顯示欄位輸入帳號密碼姓名信箱,密碼少於一個大寫英文、非email格式皆會在Broser端顯示錯誤,在此不經過server端與DB端去做驗證動作。輸入帳號後會有確認帳號是否重複,會有一個button的去做判斷,此時點下button時會利用dapper去跟DB做溝通,撈出帳號欄位去判斷是否有重複,如果有,則會顯示一個alert。
如果資料輸入完畢之後,在按下註冊button則會再次利用dapper對DB做insert的動作。
請問我該把dapper這個動作放在controller之內嗎?公司的前輩跟我說我之前做的會員系統都是寫在controller裡面,這樣會造成後端的處理器一直處於運算動作的狀態,所以要改成dapper去做DATA的CRUD動作。可是如果我把dapper放在view卻放不進去(?)我知道應該放不進去,可是我卻不知道dapper這個動作該放在哪裡?是不是要做dapper之前要先給她一串連現地指令,還是說連線的指令可以寫在webconfig內?麻煩各位前輩不吝指教(謝謝)
另外想問,dapper我的觀念是,有需要去DB裡面做資料比對的時後才會open,然後取完資料會先放在temp檔裡面去做比對,比對完之後才會close,去釋放空間,這樣是正確的觀念嗎(?)
麻煩各位前輩可以指教(要鞭要打都可以),虛心願意學習。或者有前輩可以給我一個google的關鍵字。
我知道自己的google技術沒有很好,很多關鍵字都找不到答案,還在多多練習階段。
(喔,對了,我不是在軟體公司上班,所以我沒有其他同事可以幫我解決問題。)
公司的前輩跟我說我之前做的會員系統都是寫在controller裡面,這樣會造成後端的處理器一直處於運算動作的狀態
不應該一直運算,前端送完reqeust處理完資料之後就停止運算
如果我把dapper放在view卻放不進去(?)我知道應該放不進去
對,不要放在view
Dapper很簡單,像是查詢會員資料
只要需要建立Connection物件並查詢 + 導入參數
有需要去DB裡面做資料比對的時後才會open,然後取完資料會先放在temp檔裡面去做比對,比對完之後才會close,去釋放空間,這樣是正確的觀念嗎(?)
可以使用語法糖using
,系統會幫你close跟釋放connection資源
以下簡單舉例,以ID取得會員資料
using (var connection = new SqlConnection(你的連線字串))
{
var member = connection.QueryFirst<Member>("select * from member where id = @id",new { id = "會員ID"});
}
Dapper強調簡單易用
看完這連結Dapper Dapper | Dapper Tutorial and Documentation差不多就會有概念了
雖然Dapper簡單,但是難在SQL的正確概念
又有新的東西了...
不過看起來蠻好上手的, 有空來做個筆記吧...
Dapper + EF 是我目前的最愛 :D
暐翰
不是Dapper+LINQ?
增刪改簡單查詢使用EF,複雜查詢使用Dapper Homura
原來如此
大大,範例少一個 )
。
話說,教學沒有特地去執行 open 方法,dapper 會幫你開啟,範例會加是個人習慣還是有什麼用途?
還有就是 QueryFirst 與 在查詢語法中加入 TOP 1,是習慣考量還是有什麼效能差異。
謝大大。
話說,教學沒有特地去執行 open 方法,dapper 會幫你開啟,範例會加是個人習慣還是有什麼用途?
是,可以省略Open,圖片Dapper source code區段有特別幫忙判斷
還有就是 QueryFirst 與 在查詢語法中加入 TOP 1,是習慣考量還是有什麼效能差異。
QueryFirst 等於告知AP端只會取得一筆資料
QueryFirst 通常跟top 1
做搭配,假如sql使用top 1,最好使用QueryFirst(orDefault),不要使用Query + Linq First,效能前者好很多
可以看圖片Dapper Source Code這邊判斷,要求程式只讀取單行資料
感謝 暐翰 大大
暐翰
你好,請問範例中『((你的連線字串))』這個字串是要從哪裡操作才能得知?
terpoo1250
連線字串把它看成登入google需要的帳號密碼
可以參考官方說明
連接字串語法 | Microsoft Docs
有點不懂該怎麼設連線字串,嘗試了幾次都無法成功...
我只是想要先測試看看帳號是否跟在DB裡面的資料一致而已。
SQL:
我的註冊model:
public class RegisterModel
{
public int Num { get; set; }
[Required(ErrorMessage = "請輸入帳號")]
[Display(Name = "帳號")]
public string ID { get; set; }
[Required(ErrorMessage = "請輸入密碼")]
[DataType(DataType.Password)]
[Display(Name = "密碼")]
public string Password { get; set; }
}
我的contorl語法:
[HttpPost]
public ActionResult Register(RegisterModel model)
{
string sql = "SELECT * FROM Menber WHERE ID=@ID";
using (var connection = new SqlConnection("Data Source=MySqlServer/MSSQL1;Persist Security Info = true;User ID=sa;Password=123456; Initial Catalog = AdventureWorks; "))
{
var menber = connection.Query<RegisterModel>("select * from menber where id=@id", new { ID = "@ID" });
if (menber.ToString()==model.ID)
{
TempData["message"] = "帳號已重複";
return View();
}
else
{
TempData["message"] = "此帳號可使用";
return View();
}
}
}
到底是哪裡寫錯...
你的cataloag是test1但是系統connectionstring是AdventureWorks