Advertisement

关于MVC5和Entity Framework的教程源码

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本教程源码旨在帮助开发者掌握ASP.NET MVC5框架及Entity Framework的核心技术与实践应用,适合初学者快速上手。 创建了一个使用实体框架和SQL Server Express LocalDB来存储和显示数据的简单Web应用程序,并实现了基本的CRUD操作及排序、筛选、分页与分组功能。 以下是代码: ```csharp using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using ContosoUniversity.DAL; // 数据访问层引用 using ContosoUniversity.Models; namespace ContosoUniversity.Controllers { public class StudentsController : Controller { private SchoolContext db = new SchoolContext(); public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) { ViewBag.CurrentSort = sortOrder; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? name_desc : ; ViewBag.DateSortParm = sortOrder == Date ? date_desc : Date; if (searchString != null){ page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; var studentsQuery = from s in db.Students select s; if (!string.IsNullOrEmpty(searchString)) { studentsQuery = studentsQuery.Where(s => s.LastName.Contains(searchString) || s.FirstMidName.Contains(searchString)); } switch (sortOrder){ case name_desc: studentsQuery = studentsQuery.OrderByDescending(s => s.LastName); break; case Date: studentsQuery = studentsQuery.OrderBy(s => s.EnrollmentDate); break; case date_desc: studentsQuery = studentsQuery.OrderByDescending(s => s.EnrollmentDate); break; default: // 默认排序为按姓名升序 studentsQuery = studentsQuery.OrderBy(s => s.LastName); } int pageSize = 6; int pageNumber = (page ?? 1); return View(studentsQuery.ToPagedList(pageNumber, pageSize)); } public ActionResult Details(int? id) { if(id == null){ return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if(student == null){ return HttpNotFound(); } return View(student); } // 添加学生的视图和POST操作 public ActionResult Create() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(Include = LastName,FirstMidName,EnrollmentDate)] Student student) { try{ if(ModelState.IsValid){ db.Students.Add(student); db.SaveChanges(); return RedirectToAction(Index); } }catch(DataException){ // 数据异常处理 ModelState.AddModelError(, 无法保存更改。请重试,如问题持续,请联系系统管理员。); } return View(student); } public ActionResult Edit(int? id) { if(id == null){ return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null){ return HttpNotFound(); } return View(student); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = ID,LastName,FirstMidName,EnrollmentDate)] Student student) { if(ModelState.IsValid){ db.Entry(student).State = EntityState.Modified; try{ db.SaveChanges(); return RedirectToAction(Index); }catch(DataException){ // 数据异常处理 ModelState.AddModelError(, 无法保存更改。请重试,如问题持续,请联系系统管理员。); } } return View(student); } public ActionResult Delete(int? id) { if(id == null){ return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null){ return HttpNotFound(); } return View(student); } [HttpPost, ActionName(Delete)] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Student student = db.Students.Find(id); db.Students.Remove(student); try{ db.SaveChanges(); return RedirectToAction(Index); }catch(DataException){ // 数据异常处理 ModelState.AddModelError(, 删除失败。请重试,如问题持续,请联系系统管理员。); } return View(student); } protected override void Dispose(bool disposing) { if(disposing){ db.Dispose(); } base.Dispose(disposing); } } } ``` 这个控制器类处理学生数据的创建、读取、更新和删除操作,同时支持排序与分页功能。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • MVC5Entity Framework
    优质
    本教程源码旨在帮助开发者掌握ASP.NET MVC5框架及Entity Framework的核心技术与实践应用,适合初学者快速上手。 创建了一个使用实体框架和SQL Server Express LocalDB来存储和显示数据的简单Web应用程序,并实现了基本的CRUD操作及排序、筛选、分页与分组功能。 以下是代码: ```csharp using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Net; using System.Web; using System.Web.Mvc; using ContosoUniversity.DAL; // 数据访问层引用 using ContosoUniversity.Models; namespace ContosoUniversity.Controllers { public class StudentsController : Controller { private SchoolContext db = new SchoolContext(); public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) { ViewBag.CurrentSort = sortOrder; ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? name_desc : ; ViewBag.DateSortParm = sortOrder == Date ? date_desc : Date; if (searchString != null){ page = 1; } else { searchString = currentFilter; } ViewBag.CurrentFilter = searchString; var studentsQuery = from s in db.Students select s; if (!string.IsNullOrEmpty(searchString)) { studentsQuery = studentsQuery.Where(s => s.LastName.Contains(searchString) || s.FirstMidName.Contains(searchString)); } switch (sortOrder){ case name_desc: studentsQuery = studentsQuery.OrderByDescending(s => s.LastName); break; case Date: studentsQuery = studentsQuery.OrderBy(s => s.EnrollmentDate); break; case date_desc: studentsQuery = studentsQuery.OrderByDescending(s => s.EnrollmentDate); break; default: // 默认排序为按姓名升序 studentsQuery = studentsQuery.OrderBy(s => s.LastName); } int pageSize = 6; int pageNumber = (page ?? 1); return View(studentsQuery.ToPagedList(pageNumber, pageSize)); } public ActionResult Details(int? id) { if(id == null){ return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if(student == null){ return HttpNotFound(); } return View(student); } // 添加学生的视图和POST操作 public ActionResult Create() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create([Bind(Include = LastName,FirstMidName,EnrollmentDate)] Student student) { try{ if(ModelState.IsValid){ db.Students.Add(student); db.SaveChanges(); return RedirectToAction(Index); } }catch(DataException){ // 数据异常处理 ModelState.AddModelError(, 无法保存更改。请重试,如问题持续,请联系系统管理员。); } return View(student); } public ActionResult Edit(int? id) { if(id == null){ return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null){ return HttpNotFound(); } return View(student); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include = ID,LastName,FirstMidName,EnrollmentDate)] Student student) { if(ModelState.IsValid){ db.Entry(student).State = EntityState.Modified; try{ db.SaveChanges(); return RedirectToAction(Index); }catch(DataException){ // 数据异常处理 ModelState.AddModelError(, 无法保存更改。请重试,如问题持续,请联系系统管理员。); } } return View(student); } public ActionResult Delete(int? id) { if(id == null){ return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Student student = db.Students.Find(id); if (student == null){ return HttpNotFound(); } return View(student); } [HttpPost, ActionName(Delete)] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { Student student = db.Students.Find(id); db.Students.Remove(student); try{ db.SaveChanges(); return RedirectToAction(Index); }catch(DataException){ // 数据异常处理 ModelState.AddModelError(, 删除失败。请重试,如问题持续,请联系系统管理员。); } return View(student); } protected override void Dispose(bool disposing) { if(disposing){ db.Dispose(); } base.Dispose(disposing); } } } ``` 这个控制器类处理学生数据的创建、读取、更新和删除操作,同时支持排序与分页功能。
  • Entity Framework生成器
    优质
    Entity Framework 代码生成器是一款自动化工具,用于根据数据库模式生成实体类和数据访问层代码,简化.NET应用程序的数据操作。 这是我个人在开发工作中为了减少不必要的工作量而编写的一个EF项目专用的代码生成器。虽然可能不够专业,但确实为我节省了不少时间。本项目仅对使用EF框架的人有帮助,它主要能够帮助生成以下方法: 1. 生成新增方法Add; 2. 生成保存方法Save; 3. 生成获取全部列表的方法GetAll; 4. 生成获取对象的方法Get; 5. 生成分页方法 GetListByPaging; 6. 生成删除方法Delete。 以上基本上涵盖了常用的业务需求,希望对大家有所帮助。
  • ADO.NET Entity Framework 全面(涵盖初学者到进阶)
    优质
    本书为读者提供了一站式的ADO.NET Entity Framework学习指南,内容覆盖从基础概念到高级应用的全部阶段,适合各水平层次的学习者。 Entity Framework完整版教程涵盖了从初级到中级再到高级的各个阶段,内容循序渐进地引导学习者深入理解并掌握这一技术框架。
  • Entity Framework官方中文指南
    优质
    《Entity Framework官方中文指南》是一本全面介绍微软.NET框架中ORM工具Entity Framework使用的权威教程,内容涵盖从基础到高级的所有知识点。 Entity Framework微软官方教程包含800多页内容,涵盖了EF Core和EF 6等多个版本的详细介绍。
  • Entity Framework多表查询方法
    优质
    本文将详细介绍在 Entity Framework 中进行多表查询的方法和技巧,包括使用LINQ实现复杂的关联查询以及如何优化性能。 Entity Framework 是一种强大的数据访问技术,提供了多种查询方式来满足不同的业务需求。本段落将详细介绍 Entity Framework 中的多表查询方法,包括简单查询、部分字段查询、单一记录查询以及 LEFT JOIN 和 INNER JOIN 连接查询等。 在执行简单查询时,可以使用 Func 形式或 Linq 形式的代码实现。例如: SQL:`SELECT * FROM [Clients] WHERE Type=1 AND Deleted=0 ORDER BY ID` EF(Entity Framework): ```csharp //Func 形式 var clients = ctx.Clients.Where(c => c.Type == 1 && c.Deleted == 0) .OrderBy(c => c.ID).ToList(); //Linq 形式 var clients = from c in ctx.Clients where c.Type == 1 && c.Deleted == 0 orderby c.ID select c; ``` 在实践中,我们经常需要查询表中的部分字段。使用 Entity Framework 的 Select 方法可以实现这一需求。 SQL:`SELECT ID, Name FROM [Clients] WHERE Status=1` EF: ```csharp //Func 形式 var clients = ctx.Clients.Where(c => c.Status == 1) .Select(c => new { c.ID, Name = c.ComputerName }).ToList(); //Linq 形式 var clients = from c in ctx.Clients where c.Status == 1 select new { c.ID, Name = c.ComputerName }; ``` 有时,我们需要查询单一记录而不是整个集合。在 Entity Framework 中可以使用 FirstOrDefault 方法来实现。 SQL:`SELECT * FROM [Clients] WHERE ID=100` EF: ```csharp //Func 形式 var client = ctx.Clients.FirstOrDefault(c => c.ID == 100); //Linq 形式 var client = (from c in ctx.Clients where c.ID == 100 select c).FirstOrDefault(); ``` 在 Entity Framework 中,可以使用 Join 方法来实现 LEFT JOIN 连接查询。 SQL:`SELECT c.ID,c.ComputerName,g.Name GroupName FROM [Clients] c LEFT JOIN [Groups] g ON c.GroupID = g.ID WHERE c.Status=1` EF: ```csharp //Func 形式 var clients = ctx.Clients.Where(c => c.Status == 1) .Select(c => new { c.ID, ComputerName = c.ComputerName, GroupName = ctx.Groups.FirstOrDefault(g => g.ID == c.GroupID).Name }).ToList(); //Linq 形式 var clients = from c in ctx.Clients where c.Status == 1 select new { c.ID, ComputerName = c.ComputerName , GroupName = (from g in ctx.Groups where g.ID == c.GroupID select g.Name).FirstOrDefault() }; ``` 对于 INNER JOIN 连接查询,同样可以使用 Entity Framework 的 Join 方法来实现。 SQL:`SELECT c.ID,c.ComputerName,g.Name AS GroupName FROM [Clients] c INNER JOIN [Groups] g ON c.GroupID = g.ID WHERE c.Status=1 ORDER BY g.Name` EF: ```csharp //Func 形式 var clients = ctx.Clients.Where(c => c.Status == 1) .Join(ctx.Groups, c => c.GroupID, g => g.ID, (c, g) => new { c.ID, ComputerName = c.ComputerName , GroupName = g.Name }) .OrderBy(r=>r.GroupName).ToList(); //Linq 形式 var clients = from c in ctx.Clients where c.Status == 1 join g in ctx.Groups on c.GroupID equals g.ID orderby g.Name select new {c.ID, ComputerName=c.ComputerName , GroupName=g.Name }; ``` 通过掌握以上介绍的查询方式,可以满足不同业务需求,并提高开发效率和数据访问性能。
  • ASP.NET Identity with SQLite and Entity Framework: Database Implementation Details...
    优质
    本教程深入探讨了如何使用SQLite和Entity Framework在ASP.NET项目中实现Identity认证系统的数据库细节与配置。 ASP.NET-Identity-SQLite-EntityFramework 是基于 SQLite 数据库和 Entity Framework ORM 实现的 ASP.NET Identity 成员资格基础信息项目。出于项目的特定需求,这里没有采用多角色策略(即一个用户可以拥有多个角色),而是采用了单一角色策略(每个用户对应一个角色)。本项目从 MVC 5 中使用 ASP.NET Identity 2 开始构建。 该项目基于 SQLite 数据库,并且使用了 System.Data.SQLite ADO.NET 提供程序。如何正确安装和配置 SQLite 数据库以及 System.Data.SQ,是实现此项目的必要步骤之一。
  • ASP.NET MVC、Entity FrameworkLINQMySQL电子商务网站研究课题
    优质
    本课题聚焦于运用ASP.NET MVC架构,结合Entity Framework与LINQ技术,探讨并构建高效稳定的MySQL数据库驱动型电子商务平台。 ASP.NET MVC 是微软开发的一个开源Web应用程序框架,用于构建可测试、可维护的Web应用。MVC模式将应用逻辑分为模型(Model)、视图(View)和控制器(Controller)。其中,模型负责处理数据与业务逻辑;视图展示数据给用户;控制器接收并响应用户的输入。 Entity Framework 是微软提供的一款ORM框架,它允许开发者使用面向对象的方式操作数据库,无需直接编写SQL语句。通过EF,可以创建与数据库表对应的实体类简化了代码的编写工作。该框架支持Code First、Database First和Model First三种开发方式,其中最常用的是Code First。 LINQ 是.NET Framework的一部分,提供了在C#或VB.NET中进行数据查询的能力。它允许开发者使用类似SQL语法直接对各种数据源(集合、数据库等)执行查询操作。LINQ to Entities是专门用于Entity Framework的变体,能够将查询表达式转换为SQL语句。 MySQL是一款开源的关系型数据库管理系统,在Web应用开发中被广泛应用。其特点包括高性能、易用性和跨平台支持,并且它还支持ACID事务和多种索引类型等特性。 在这个背景下,我们可以看到这是一个使用ASP.NET MVC作为前端框架,Entity Framework处理数据访问层逻辑,LINQ用于执行查询操作的电子商务网站项目。通过一周半的时间学习与实践这些技术后,在没有注释的情况下成功实现了基础功能如商品展示、购物车和订单管理等功能模块。这不仅有助于开发者更好地理解和掌握Web开发的整体流程和技术栈,也展示了如何在实际项目中整合使用.NET生态中的关键技术组件来构建高效稳定的Web应用系统。
  • Entity Framework在C#中数据持久化艺术
    优质
    《Entity Framework在C#中的数据持久化艺术》一书深入探讨了如何使用Entity Framework在C#应用程序中实现高效的数据访问和管理技术。 Entity Framework(EF)是微软开发的一种对象关系映射(ORM)框架,它允许开发者使用.NET对象来处理数据库操作,从而避免了直接编写SQL代码的需要。通过提供LINQ支持,EF使得数据查询直观且类型安全。本段落将详细介绍EF的核心概念、使用方法以及其在C#中的应用。 Entity Framework是一个强大的ORM工具,借助LINQ支持和简化的数据访问API,它使C#开发者能够更高效地处理数据库操作。无论是EF Core还是EF 6,都为不同平台和需求提供了灵活的选择。掌握并理解EF的核心概念及其使用方法后,开发人员可以构建出更加高效且易于维护的数据访问层。 Entity Framework(简称EF)是微软推出的一种对象关系映射框架,它使得开发者能够利用.NET类进行数据库操作而无需手动编写SQL语句。通过提供LINQ支持和直观的类型安全查询功能,EF简化了数据处理流程。本段落旨在深入探讨该工具的核心理念、使用技巧及其在C#编程中的具体应用实例。
  • Entity Framework精华实用指南.pdf (吕高旭)
    优质
    《Entity Framework精华实用指南》由吕高旭编写,是一本深入浅出地讲解Entity Framework核心特性和实战技巧的专业书籍。适合.NET开发人员学习和参考。 Entity Framework(EF)是Microsoft开发的一个对象关系映射(ORM)框架,适用于.NET应用程序。它允许程序员使用面向对象的编程语言来操作数据库,并且无需直接编写SQL语句。这种工具简化了数据访问层的开发过程,提高了效率,并支持多种数据库系统。 吕高旭所著《Entity Framework实用精要》一书深入浅出地介绍了EF的核心概念和实际应用技巧。以下是基于此书内容的关键知识点概述: 1. **基本概念**:理解上下文(DbContext)、实体(Entities)、实体数据模型(EDM)等核心概念是至关重要的,它们构成了ORM的基础。 2. **设计模式**:书中详细讲解了代码优先与模型优先两种设计模式。前者通过C#类定义实体并自动生成数据库;后者则是先创建数据库再生成实体类。 3. **工作流程**:EF的工作机制包括实体的创建、查询、更新和删除,支持使用Linq或API进行操作,并自动转换为SQL语句执行。 4. **迁移功能**:提供了一个强大的数据库迁移工具,允许开发人员在项目中修改数据库结构而无需手动版本管理。 5. **加载策略**:介绍了懒加载与预加载两种数据访问方式。前者延迟关联数据的获取以提高性能;后者则一次性载入所有相关联的数据。 6. **查询优化**:探讨了Linq查询执行计划的理解及如何避免N+1问题,使用Include方法可以更高效地处理关联数据。 7. **设计模式应用**:仓储(Repository)和单元工作(Unit Of Work)模式被推荐用于EF项目中以增加灵活性与测试性。 8. **性能调优**:介绍了在特定情况下直接编写SQL可能比使用EF更为高效的场景,以及如何通过批处理操作、减少数据库交互次数等方法优化应用表现。 9. **多数据库支持**:说明了EF可以连接多种类型的数据库如SQL Server, MySQL和SQLite,增强了应用程序的可移植性。 10. **异步编程**:介绍了利用async/await关键字实现非阻塞I/O操作的方法,有助于提高并发性能特别是在处理大量数据或远程服务时更为明显。 《Entity Framework实用精要》通过实例详细解释了以上内容,并展示了如何在实际项目中应用EF。这本书为开发者掌握和运用EF提供了宝贵的资源和支持。
  • 深入解析ASP.NET Core中Entity Framework应用方法
    优质
    本篇文章详细探讨了在ASP.NET Core框架中使用Entity Framework进行数据库操作的方法和技巧,旨在帮助开发者更好地理解和运用这一强大的ORM工具。通过实例分析,讲解了如何高效地设计和实现数据访问层,提升应用程序的性能与可维护性。 本段落主要介绍了如何在ASP.NET Core中应用Entity Framework,并具有一定的参考价值,有兴趣的读者可以进一步了解这一主题。