溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Entity Framework之DB First方式有什么用

發(fā)布時(shí)間:2021-08-17 11:10:19 來(lái)源:億速云 閱讀:145 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(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ù)庫(kù)庫(kù)中存在兩個(gè)表,一個(gè)是專業(yè)表,一個(gè)學(xué)生表,一個(gè)學(xué)生只能屬于一個(gè)專業(yè):

Entity Framework之DB First方式有什么用

其中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ù)庫(kù)實(shí)體模型

Entity Framework之DB First方式有什么用

Entity Framework之DB First方式有什么用

Entity Framework之DB First方式有什么用

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

Entity Framework之DB First方式有什么用

Entity Framework之DB First方式有什么用

Entity Framework之DB First方式有什么用

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

Entity Framework之DB First方式有什么用

點(diǎn)擊“完成”

Entity Framework之DB First方式有什么用

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

Entity Framework之DB First方式有什么用

Entity Framework之DB First方式有什么用

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

Entity Framework之DB First方式有什么用

Entity Framework之DB First方式有什么用

生成代碼如下:

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出來(lái)的并且對(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è):

Entity Framework之DB First方式有什么用

專業(yè)列表:

Entity Framework之DB First方式有什么用

同樣實(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ò)如下:

Entity Framework之DB First方式有什么用

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

Entity Framework之DB First方式有什么用

刷新頁(yè)面:

Entity Framework之DB First方式有什么用

編輯:

Entity Framework之DB First方式有什么用

刪除:

Entity Framework之DB First方式有什么用

列表:

Entity Framework之DB First方式有什么用

在MajorController中有介紹EF的兩種更新方式。

關(guān)于“Entity Framework之DB First方式有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI