zoukankan      html  css  js  c++  java
  • 学习MVC -第3部分:使用EntityFramework创建MVC应用程序和执行CRUD操作

    介绍 在我们的第一次和第二次尝试学习MVC,我们学会了什么是MVC,关注点分离,如何创建一个简单的MVC应用程序和使用LINQ to SQL的应用程序上执行CRUD操作。 本文主要关注如何在MVC应用程序中执行CRUD操作通过使用一个ORM(实体框架)。 本文试图克服困惑有关如何使用EntityFramework MVC应用程序在一个非常简单的方法。 我们的Roadmap  我们的路线图是相同的: Part1:介绍MVC架构和关注点分离又是;第2部分:创建MVC应用程序从头开始使用LINQ to SQL并连接数据库只第3部分:连接MVC应用程序的帮助下EntityFramework DB-First方法。第4部分:连接MVC应用程序的帮助下EntityFramework优先方法只第5部分:实现存储库模式与EntityFramework MVC应用程序只第6部分:实现一个通用的库模式和单元的工作模式与EntityFramework MVC应用程序只 的必备条件 有几个先决条件,我们从这篇文章开始: 我们已经运行样例应用程序,我们在本系列文章的第二部分。我们有EntityFramework 4.1包或DLL本地文件系统。我们理解MVC应用程序是如何创建的。 ORM和EntityFramework是什么? 现在让我们看一看实体框架由微软给出的标准定义: “微软ADO。网络实体框架是一个对象/关系映射(ORM)框架,使开发人员能够使用关系数据为特定于域的对象,不再需要的大部分数据访问管道开发人员通常需要编写的代码。使用实体框架,开发人员使用LINQ查询问题,然后检索和操作数据为强类型对象。实体框架的ORM实现提供服务,如变更跟踪,身份决议,延迟加载和查询翻译,这样开发者就可以专注于他们的特定于应用程序的业务逻辑,而不是数据访问基本面因素。” 用简单的语言,实体框架是一个对象/关系映射(ORM)框架。这是一个增强ADO。网络,一个ADO的上层。净,给开发人员一个自动化访问机制,将数据存储在数据库中。 希望这给瞥见一个ORM和EntityFramework。 EntityFramework架构 让我们来浏览EntityFramework的架构: , 我们的Web应用程序与实体数据模型(实体框架),ADO之间充当接口。净提供者和数据库,获取/保存数据流图中所描述的相同。 在MVC应用程序使用EntityFramework执行CRUD操作 打开现有的学习MVC应用程序,我们使用LINQ to SQL创建。 我有很少的改变现有的应用程序,让它容易理解当我们实现EntityFramework。 隐藏,复制Code

    1.	Changed the model class name from User to UserList,
    2.	
    3.	namespace LearningMVC.Models
    4.	{
    5.	    #region User Model...
    6.	    /// <summary>
    7.	    /// User Model Class, purposely used for populating views and carry data from database.
    8.	    /// </summary>
    9.	    public class UserList
    10.	    {
    11.	        #region Automated Properties
    12.	        public int UserId { get; set; }
    13.	        public string FirstName { get; set; }
    14.	        public string LastName { get; set; }
    15.	        public string EMail { get; set; }
    16.	        public string Address { get; set; }
    17.	        public string PhoneNo { get; set; }
    18.	        public string Company { get; set; }
    19.	        public string Designation { get; set; } 
    20.	        #endregion
    21.	    } 
    22.	    #endregion
    23.	}
    
    2. Changed the Solution name from LearningMVC to LearningMVCWithEF

    。 步骤 打开应用程序,修改了上述变化。删除MyDBML。dbml类解决方案。现在不构建解决方案,它将导致一个错误,我们已经删除了dbml文件,所以控制器方法访问dbml文件将把编译时错误。去项目,右键单击,添加新项,选择安装模板和数据添加ADO。净EntityDataModel给应用程序。 它EFDataModel.edmx名称。 新窗口将打开选择模型内容,因为我们是在数据库的第一种方法。 从数据库选择生成。 选择连接,给连接字符串名称MVCEntities图所示,单击next。 提供现有的数据库连接细节,我们用于现有的应用程序,数据库名称是MVC。如果你没有一个现有的,创建一个新的连接数据库脚本文件。 选择数据库对象,我们只有一个表,所以选择一个如图,给模型作为MVCModel名称空间。 我们得到了我们的解决方案在一个客人,我们看到实体数据模型实体框架架构上图: 在网络上。配置中,您可以看到一个新的连接字符串添加。现在你可以评论/删除旧LINQ to SQL的连接字符串。 生成强类型的实体模型类(从一个博客) 我们将使用强类型实体类。实体数据模型设计器使用一个代码生成器在Visual Studio称为文本模板转换工具箱(T4)。实体框架将自动生成一个用户类。现在的代码生成器将根据我们的实体数据模型创建一个类。 默认情况下,设计师使用一个模板,导致实体类继承实体框架的EntityObject ObjectContext和容器类继承自英孚。 这些基类be繁琐的工作的原因。ObjectContext是非常有用的,当你需要大量的控制实体框架的行为,更轻的重量DbContext提供最常需要的任务和简化代码。 微软提供了许多选择从EDM T4模板生成类。当你安装了EF 4.1,一个模板来创建简单的类包括DbContext被添加到Visual Studio。让我们告诉设计师使用这个模板而不是默认的。 右键单击模型的设计器表面。从上下文菜单中,选择添加代码生成项目。在添加新项目对话框中打开,从列表中选择代码左边安装模板的类型。选择ADO。净DbContext发生器,然后单击Add按钮。 两个新文件将在解决方案资源管理器上市,Model1.Context。tt和Model1.tt。这些都是模板文件。扩大所示的模板生成的类,如下图: 当我们打开这两个新客人,我们看到上下文类访问模型和模型类用户实体已经创建,完整代码。 你有没有注意到,我们还没有写一行代码,这是革命EntityFramework想出了。让我们把热烈的掌声给聪明的工作。 现在时间来编写一些代码 直到现在,我们还没有写一行代码,但是访问上下文类,我们需要改变的逻辑访问LINQ to SQL数据上下文EntityFramework数据上下文在我们前面创建的控制器在本教程的第二部分。 步骤 步骤1:将我们所有的意见UserList类,之后用户类,但是我们改变UserList类(记得吗? ?) 第二步:打开控制器,改变上下文类如下所示的访问机制,例如,指数的行动。 早些时候 隐藏,复制Code

    public ActionResult Index()
      {
          var dbContext = new MyDBDataContext();
          var userList = from user in dbContext.Users select user;
          var users = new List<LearningMVC.Models.User>();
          if (userList.Any())
          {
              foreach (var user in userList)
              {
                  users.Add(new LearningMVC.Models.User()
                  { UserId = user.UserId, Address = user.Address,
                  Company = user.Company, FirstName =    user.FirstName,
                  LastName = user.LastName, Designation = user.Designation,
                  EMail = user.EMail, PhoneNo = user.PhoneNo });
              }
          }
          ViewBag.FirstName = "My First Name";
          ViewData["FirstName"] = "My First Name";
          if(TempData.Any())
          {
              var tempData = TempData["TempData Name"];
          }
          return View(users);
      }
    

    现在 隐藏,复制Code

    public ActionResult Index()
            {
                var dbContext = new MVCEntities() ;
                var userList = from user in dbContext.Users select user;
                var users = new List<LearningMVC.Models.UserList>();
                if (userList.Any())
                {
                    foreach (var user in userList)
                    {
                        users.Add(new LearningMVC.Models.UserList() 
                        { UserId = user.UserId, Address = user.Address, 
                        Company = user.Company, FirstName = user.FirstName, 
                        LastName = user.LastName, Designation = user.Designation, 
                        EMail = user.EMail, PhoneNo = user.PhoneNo });
                    }
                }
                ViewBag.FirstName = "My First Name";
                ViewData["FirstName"] = "My First Name";
                if(TempData.Any())
                {
                    var tempData = TempData["TempData Name"];
                }
                return View(users);
            }

    你可以看到我们只需要改变访问机制,仅仅改变2 - 3行,而不是任何应用程序的逻辑。 步骤3:同样,都做同样的动作。我不展示如何做,但你可以比较源代码,现在可以自己做的事。 步骤4:注意LINQ to SQL上下文类使用InsertOnSubmit () / DeleteOnSubmit()和SubmitChanges()方法对插入、更新、删除但EF上下文类使用阀门(),.SaveChanges()。它巧妙地在需要时也是如此。 第五步:现在所有的设置,重新构建应用程序,你不会得到一个错误。现在可以运行。 第六步:当您运行应用程序,它运行在跑步之前和现在,你可以执行CRUP操作作为一个最终用户到应用程序,并测试应用程序。 伙计,我们首先完成实体框架的数据库方法。你可以再次鼓掌,需要一些休息。 , 结论 我们已经搬到一个步骤在MVC CRUD操作的先进水平。有更多学习MVC和实体框架,我们将在后续文章。在本文中,我们掌握了如何执行CRUD操作使用EntityFramework MVC应用程序的数据库中第一种方法,下一篇文章将重点放在我最喜欢CodeFirst方法。 编码:快乐), 本文转载于:http://www.diyabc.com/frontweb/news2094.html

  • 相关阅读:
    高并发,执行耗时短的任务,还有低并发,执行耗时长的任务,各自选取什么样的线程池比较合理?为什么?如果业务场景是高并发,且任务耗时长时,有什么解决思路?
    java的重载、覆盖和隐藏的区别
    写出以下代码的输出结果?
    MySQL存储引擎通常有哪3种?各自分别有什么特点?应用场景是哪些?
    oracle的索引有几种?各有何用途?
    Apach Web Server区别于其他应用服务器的主要特点是什么?
    eclipse左边工程列表不见了,怎么调出来
    Java 生成一个记事本
    JS indexOf(),split(),substring(),substr(),Math.ceil(),Math.floor(),Math.round()的内容
    Java 有关于线程
  • 原文地址:https://www.cnblogs.com/Dincat/p/13457079.html
Copyright © 2011-2022 走看看