這篇文章將為大家詳細(xì)講解有關(guān)Entity Framework之DB First方式有什么用,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

EF(Entity Framework的簡(jiǎn)稱,下同)有三種方式,分別是:DataBase First、 Model First和Code First。
下面是Db First的方式:
1. 數(shù)據(jù)庫庫中存在兩個(gè)表,一個(gè)是專業(yè)表,一個(gè)學(xué)生表,一個(gè)學(xué)生只能屬于一個(gè)專業(yè):

其中T_Major是專業(yè)表,T_Student是學(xué)生表,StudentId是學(xué)號(hào),MajorId是專業(yè)Id,T_Major與T_Student是一對(duì)多的關(guān)系。
2. 項(xiàng)目中添加數(shù)據(jù)庫實(shí)體模型



因?yàn)橹皼]有配置過數(shù)據(jù)庫連接,所以點(diǎn)擊“新建庫連接”,如果之前配置過數(shù)據(jù)庫連接,可以直接從下拉列表中選擇或者新建



選擇需要生成的表/存儲(chǔ)過程等

點(diǎn)擊“完成”

這里會(huì)彈出如下圖的窗口,然后選擇確定(如果再彈出,也選擇確定),如果不小心點(diǎn)擊了取消,可以在模型設(shè)計(jì)界面Ctrl + S(保存的快捷鍵),或如下圖的操作,然后會(huì)彈出窗口,一直確定就行。


這里是使用MVC,所以添加一個(gè)控制器來測(cè)試(這里為了快速生成讀寫的控制器方法,選擇“包含讀/寫操作的MVC5控制器”)


生成代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Zhong.Web.Controllers
{
public class StudentController : Controller
{
// GET: Student
public ActionResult Index()
{
return View();
}
// GET: Student/Details/5
public ActionResult Details(int id)
{
return View();
}
// GET: Student/Create
public ActionResult Create()
{
return View();
}
// POST: Student/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
// GET: Student/Edit/5
public ActionResult Edit(int id)
{
return View();
}
// POST: Student/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
// GET: Student/Delete/5
public ActionResult Delete(int id)
{
return View();
}
// POST: Student/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}同樣的方法添加一個(gè)Major控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Zhong.Web.Controllers
{
public class MajorController : Controller
{
// GET: Major
public ActionResult Index()
{
return View();
}
// GET: Major/Details/5
public ActionResult Details(int id)
{
return View();
}
// GET: Major/Create
public ActionResult Create()
{
return View();
}
// POST: Major/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
// GET: Major/Edit/5
public ActionResult Edit(int id)
{
return View();
}
// POST: Major/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
// GET: Major/Delete/5
public ActionResult Delete(int id)
{
return View();
}
// POST: Major/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}由于學(xué)生表MajorId依賴于Major表,所以需要先有專業(yè),才能新增學(xué)生數(shù)據(jù)(這里不討論是否合理)
編寫邏輯代碼,創(chuàng)建視圖
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Zhong.Web.Models;
namespace Zhong.Web.Controllers
{
public class MajorController : Controller
{
// GET: Major
public ActionResult Index()
{
var majors = new EFDbEntities().T_Major.ToList();
return View(majors);
}
// GET: Major/Details/5
public ActionResult Details(int id)
{
var major = new EFDbEntities().T_Major.Find(id);
if (major == null)
{
return Content("參數(shù)錯(cuò)誤");
}
return View(major);
}
// GET: Major/Create
public ActionResult Create()
{
return View();
}
// POST: Major/Create
[HttpPost]
public ActionResult Create(T_Major entity)
{
if (entity != null)
{
var entities = new EFDbEntities();
entities.T_Major.Add(entity);
entities.SaveChanges();
}
return RedirectToAction("Index");
}
// GET: Major/Edit/5
public ActionResult Edit(int id)
{
var entity = new EFDbEntities().T_Major.Find(id);
if (entity == null)
{
return Content("參數(shù)錯(cuò)誤");
}
return View(entity);
}
// POST: Major/Edit/5
[HttpPost]
public ActionResult Edit(T_Major entity)
{
if (entity == null)
{
return Content("參數(shù)錯(cuò)誤");
}
var entities = new EFDbEntities();
#region 方式一
////該方式一般是根據(jù)主鍵先讀取數(shù)據(jù),然后再逐個(gè)賦值,最后更新
//var oldEntity = entities.T_Major.Find(entity.Id);
//if (oldEntity!=null)
//{
// oldEntity.Name = entity.Name;
// entities.SaveChanges();
//}
#endregion
#region 方式二
//該方式是直接將新的實(shí)體(可能是new出來的并且對(duì)主鍵等的屬性賦值好了)附加到上下文,然后標(biāo)記狀態(tài)為修改Modified
entities.T_Major.Attach(entity);
entities.Entry(entity).State = System.Data.Entity.EntityState.Modified;
entities.SaveChanges();
#endregion
return RedirectToAction("Index");
}
// GET: Major/Delete/5
public ActionResult Delete(int id)
{
var major = new EFDbEntities().T_Major.Find(id);
return View(major);
}
// POST: Major/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
var entities = new EFDbEntities();
var major = entities.T_Major.Find(id);
entities.T_Major.Remove(major);
entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}添加專業(yè):

專業(yè)列表:

同樣實(shí)現(xiàn)學(xué)生控制器與視圖:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Zhong.Web.Models;
namespace Zhong.Web.Controllers
{
public class StudentController : Controller
{
private EFDbEntities entities = new EFDbEntities();
// GET: Student
public ActionResult Index()
{
var students = entities.T_Student.ToList();
return View(students);
}
// GET: Student/Details/5
public ActionResult Details(int id)
{
var student = entities.T_Student.Find(id);
return View(student);
}
// GET: Student/Create
public ActionResult Create()
{
ViewData["MajorId"] = entities.T_Major.Select(m => new SelectListItem { Text = m.Name, Value = m.Id.ToString() });
return View();
}
// POST: Student/Create
[HttpPost]
public ActionResult Create(T_Student entity)
{
entities.T_Student.Add(entity);
entities.SaveChanges();
return RedirectToAction("Index");
}
// GET: Student/Edit/5
public ActionResult Edit(int id)
{
var student = entities.T_Student.Find(id);
ViewData["MajorId"] = entities.T_Major.Select(m => new SelectListItem { Text = m.Name, Value = m.Id.ToString() });
return View(student);
}
// POST: Student/Edit/5
[HttpPost]
public ActionResult Edit(T_Student entity)
{
if (entity == null)
{
return Content("參數(shù)錯(cuò)誤");
}
entities.T_Student.Attach(entity);
entities.Entry(entity).State = System.Data.Entity.EntityState.Modified;
entities.SaveChanges();
return RedirectToAction("Index");
}
// GET: Student/Delete/5
public ActionResult Delete(int id)
{
var student = entities.T_Student.Find(id);
return View(student);
}
// POST: Student/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
var student = entities.T_Student.Find(id);
entities.T_Student.Remove(student);
entities.SaveChanges();
return RedirectToAction("Index");
}
}
}添加學(xué)生時(shí),報(bào)錯(cuò)如下:

于是在控制器中增加如下代碼:

刷新頁面:

編輯:

刪除:

列表:

在MajorController中有介紹EF的兩種更新方式。
關(guān)于“Entity Framework之DB First方式有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
網(wǎng)頁題目:EntityFramework之DBFirst方式有什么用-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://chinadenli.net/article8/ejpip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站改版、面包屑導(dǎo)航、定制開發(fā)、網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)