標籤:http io ar os 使用 sp for 檔案 資料
-
EF的使用步驟:(1)將EF添加到項目:在Model右擊添加建立項找到ADO.NET實體資料模型,接著。。。(2)實現資料庫的增刪改查 查詢(因為在Model中已經添加EF實體了,所以就可以在Controller中進行有關的資料庫操作)<<controller>> //資料內容對象 OrderDBEntities db = new OrderDBEntities(); public ActionResult Index() { //使用SQO(標準查詢運算子),查詢 //實際返回的是IQueryable 介面的之類對象 //IQueryable<Models.Customer> query = db.Customers.Where(d => d.Address == "111"); //這樣轉有可能報異常 EnumerableQuery<Models.Customer> query = (EnumerableQuery<Models.Customer>)db.Customers.Where(d => d.Address == "111"); //DbQuery 支援消極式載入,就是只有使用到資料的時候,才去查詢資料庫 //DbQuery<Models.Customer> query = db.Customers.Where(d => d.Address == "111") as DbQuery<Models.Customer>; //List<Models.Customer> list = query.ToList(); //也可以這樣 // List<Models.Customer> list = db.Customers.Where(d => d.Address == "111").ToList(); //用第二種方式:使用Linq語句,該文法只是給程式員用的,.net編譯器會在編譯器集的時候把它轉化為SQO //IQueryable<Models.Customer> query = from d in db.Customers where d.Address == "111" select d; //List<Models.Customer> list = (from d in db.Customers where d.Address == "111" select d).ToList(); List<Models.Customer> list = (from d in db.Customers select d).ToList(); //使用ViewData將資料傳給View ViewData["DataList"] = list; return View(); } <<View>><body> <table border="1"> <!--要取到資料就直接@對應的變數 這樣就可以了(匯入命名空間也是一個道理)--> @foreach (Customer a in ViewData["DataList"] as List<Customer>) { <tr> <td>@a.Address</td> <td>@a.CustomerName</td> <td><a href="/home/del/@a.CustomerNo">刪除</a> <a href="/home/modify/@a.CustomerNo">修改</a> </td> </tr> } </table></body> 刪除:<<Controller>> public ActionResult Del(string id) //這個id是通過超連結帶過來的 { try { //需要一個實體物件參數 //db.Customers.Remove(new Customer() {CustomerNo = id }); //1,建立要刪除的對象 Customer modelDel = new Customer() { CustomerNo = id }; //2,將對象添加到EF管理容器中 db.Customers.Attach(modelDel); //3,修改對象的封裝類對象標識為刪除狀態 db.Customers.Remove(modelDel); //4,更新到資料庫 db.SaveChanges(); //5,更新成功,則命令流浪器重新導向 到 /Home/Index 方法 return RedirectToAction("Index", "Home"); } catch (Exception ) { //指定對應跳轉的視圖Test下的Test.cshtml檔案 return RedirectToAction("Test", "Test"); //return Content("刪除失敗" + ex.Message); } }<<View>>刪除哪有什麼視圖,成功失敗頁面不給出了 修改在視圖裡面肯定又個修改串連,點擊跳轉到對應的頁面,並將參數傳遞給對應的函數<<View>><body> <table border="1"> <!--要取到資料就直接@對應的變數 這樣就可以了(匯入命名空間也是一個道理)--> @foreach (Customer a in ViewData["DataList"] as List<Customer>) { <tr> <td>@a.Address</td> <td>@a.CustomerName</td> <td><a href="/home/del/@a.CustomerNo">刪除</a> <a href="/home/modify/@a.CustomerNo">修改</a> </td> </tr> } </table></body>//調用到控制器中的modify方法,並以表單的形式顯示相應的頁面<<Controller>> [HttpGet] //加上這個 只要是超連結發送過來的就調用這個 public ActionResult Modify(string id) { Customer art = (from d in db.Customers where d.Address == "111" select d).FirstOrDefault(); //將資料傳遞給視圖:用ViewBag viewData 使用view的建構函式 return View(art); }<<View>> <body> @using (Html.BeginForm("Modify", "Home", FormMethod.Post)) { <table> <tr> <td colspan="2">修改</td> </tr> <tr> <td>標題:@Html.HiddenFor(a=>a.CustomerNo)</td> @*<td>@Html.TextBox("textName",(object)Model.CustomerNo)</td>*@ <!--使用htmlHelper的強型別方法,直接從Model中根據CustoomerNo產生文字框--> <td>@Html.TextBoxFor(a =>a.CustomerNo)</td> <td>@Html.TextBoxFor(a =>a.CustomerName)</td> <td><input type="submit" value="確定修改" />@Html.ActionLink("返回","index","home")</td> </tr> </table> }</body>當使用者點擊修改的時候又將資料以Post方式發送給Home控制器中的Modify函數進行處理<<Controller>> [HttpPost] //表單提交過來的就調用這個方法 public ActionResult Modify(Customer model) { try { //1,將實體物件加入EF對象容器中,並擷取偽封裝類對象 DbEntityEntry<Customer> entry = db.Entry<Customer>(model); //2,將偽封裝類對象的狀態設定為unchanged entry.State = System.Data.EntityState.Unchanged; //3,設定被改變的屬性 entry.Property(a => a.CustomerName).IsModified = true; //4,提交到資料庫 完成修改 db.SaveChanges(); return RedirectToAction("Index", "Home"); } catch (Exception) { return RedirectToAction("Test", "Test"); } } 補充:MVC中頁面之間的跳轉是通過MapRouter代碼如下routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
-
Asp.net MVC4 使用EF實現資料庫的增刪改查