热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

成功实现Asp.NetMVC3网站与MongoDB数据库的高效集成

我们成功地构建了一个基于Asp.NETMVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。

我们已经创建了一个简单的Asp.Net MVC3网站并成功的连接了MongoDB。但只实现了创建和显示的功能。本回实现了完整的增删改查。

创建的部分,上次的代码中存在一些错误,造成了每个属性都会被创建为单独的一条记录,这并不是我们期待的结果。更改如下:

\Controllers\HomeController.cs

   1:          [HttpPost]
   2:          public ActionResult Create(FormCollection collection)
   3:          {
   4:              try
   5:              {
   6:                  var db = GetDB();
   7:                  var doc = new BsonDocument();
   8:   
   9:                  foreach (var key in collection.AllKeys)
  10:                  {
  11:                      doc.Add(new BsonElement(key, collection[key]));
  12:                  }
  13:   
  14:                  db["testTable"].Insert(doc);
  15:                  return RedirectToAction("Index");
  16:              }
  17:              catch
  18:              {
  19:                  return View();
  20:              }
  21:          }

其实这样写并不安全,会把所有从页面POST过来的内容都作为属性创建并保存,但是简单啦。我们注意力主要集中在MongoDB的使用,安全性并不在考虑范围内。

显示的部分,也做了相应的修改,使其更符合Asp.Net MVC3 Razor引擎的规范:

\Controllers\HomeController.cs

   1:          public ActionResult Index()
   2:          {
   3:              var testTable = GetDB()["testTable"].FindAll();
   4:              return View(testTable);
   5:          }

\Views\Home\Index.cshtml

   1:  @{
   2:      ViewBag.Title = "Index";
   3:      Layout = "~/Views/Shared/_Layout.cshtml";    
   4:  }
   5:  

   6:      Index
   7:  
       8:      @foreach (var testData in Model)
       9:      {
      10:          
  •   11:              @{
      12:          var id = string.Empty;
      13:          foreach (var property in testData.Names)
      14:          {
      15:              if (property == "_id")
      16:              {
      17:                  id = testData[property].ToString();
      18:              }
      19:              else
      20:              {
      21:                  @string.Format("{0}:{1}", property, testData[property]);
      22:              }
      23:          }                
      24:                  "/Home/Delete/@id">Delete "/Home/Edit/@id">Edit "/Home/Details/@id">Details
      25:              }
      26:          
      27:      }
      28:  
      29:  "/Home/Create">Create New

    总体来说,Razor引擎的代码写起来还是流畅+愉快。有一个简单的校技巧,想要链接目录从网站根目录开始的话,要用“/”开头。

    显示效果如下:

    image

    接下来我们就分别来实现删除,编辑和查看功能。

    Details链接:

    \Controllers\HomeController.cs

       1:          public ActionResult Details(string id)
       2:          {
       3:              try
       4:              {
       5:                  var db = GetDB();
       6:                  var doc = db["testTable"].Find(Query.EQ("_id", new BsonObjectId(id))).First();                
       7:                  return View(doc);
       8:              }
       9:              catch
      10:              {
      11:                  return View();
      12:              }            
      13:          }

    Edit页面:

    \Controllers\HomeController.cs

       1:          public ActionResult Edit(string id)
       2:          {
       3:              var db = GetDB();
       4:              var doc = db["testTable"].Find(Query.EQ("_id", new BsonObjectId(id))).First();
       5:              return View(doc);
       6:          }

    \Home\Edit.cshtml

       1:  @{
       2:      ViewBag.Title = "Edit";
       3:      Layout = "~/Views/Shared/_Layout.cshtml";
       4:  }
       5:  

       6:      Edit
       7:  "post" action="/Home/Edit/@Model["_id"].ToString()">
       8:      Name:
       9:      "name" type="text" value="@Model["name"]" />
      10:      Age:
      11:      "age" type="text" value="@Model["age"]" />
      12:      Gender:
      13:      "gender" type="text" value="@Model["gender"]" />
      14:      Married:
      15:      "married" type="text" value="@Model["married"]" />
      16:      "submit" value="Update" />
      17:      "/Home/Index">Cancel
      18:  

    \Controllers\HomeController.cs

       1:          [HttpPost]
       2:          public ActionResult Edit(string id, FormCollection collection)
       3:          {
       4:              try
       5:              {
       6:                  var db = GetDB();
       7:                  var update = new UpdateBuilder();
       8:                  foreach (string key in collection.Keys)
       9:                  {
      10:                      update.Set(key, collection[key]);
      11:                  }
      12:   
      13:                  db["testTable"].Update(Query.EQ("_id", new BsonObjectId(id)), update);
      14:                  return RedirectToAction("Index");
      15:              }
      16:              catch
      17:              {
      18:                  return View();
      19:              }
      20:          }

    删除功能:

    \Controllers\HomeController.cs

       1:          public ActionResult Delete(string id)
       2:          {
       3:              try
       4:              {
       5:                  var db = GetDB();
       6:                  db["testTable"].Remove(Query.EQ("_id", new BsonObjectId(id)));
       7:                  return RedirectToAction("Index");
       8:              }
       9:              catch
      10:              {
      11:                  return View();
      12:              }
      13:          }
    Global.asax.cx也可以改回Index开始:
       1:              routes.MapRoute(
       2:                  "Default", // Route name
       3:                  "{controller}/{action}/{id}", // URL with parameters
       4:                  new { cOntroller= "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
       5:              );

    搞定。

    不用设计数据库好爽啊。。想怎么插就怎么插。。。无Schema好爽啊!Razor基本很人性化,缺点很少。

    不过感觉MongoDB关方的Connector功力比较弱,不支持Linq也就罢了,implicit也不实现,无法隐式转化格式,写起来很是别扭,不够流畅。

    接下来准备研究一下MongoDB的高级功能,敬请期待。

    完整代码下载: https://files.cnblogs.com/pandora/MvcApplication1_CRUD.zip 

    推荐阅读
    • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
    • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
    • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
    • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
    • 深入解析 Apache Shiro 安全框架架构
      本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
    • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
    • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
      本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
    • PHP 5.2.5 安装与配置指南
      本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
    • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
      本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
    • 深入理解 SQL 视图、存储过程与事务
      本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
    • 图数据库中的知识表示与推理机制
      本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
    • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
    • 实体映射最强工具类:MapStruct真香 ... [详细]
    • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
    • 实用正则表达式有哪些
      小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
    author-avatar
    书友80922185
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有