ASP.NET Mvc开发之查询数据_实用技巧

对于.NET平台上开发WebForm项目,程序员操作数据的方法主要是通过使用ADO.NET。而我们MVC操作数据库呢?与ADO.NET相比又有怎样的优势呢?

一、大家都在谈的EF到底是什么?

EF,全称EntityFramWork。就是微软以ADO.NET为基础发展的所谓ORM(对象关系映射框架,或者说是数据持久化框架)。

简单的来说就是根据实体对象操作数据表中数据的一种面向对象的操作框架,具体的底层也是调用ADO.NET。

下面我们就来演示怎么使用EF来操作数据库:

在数据库关系图中,表之间的关系是这样的:

1)怎么创建实体对象模型文件

①创建基于ADO.NET的实体数据模型

我这里在我的Models文件夹(可以在任意地方哦)上“右键”→“新建项”,然后点击进入,在左侧的模板中,选择"数据",在右侧就会看到“ADO.NET实体数据模型”的选项,如下图:

②点击创建,进入”实体数据模型向导“,这里我们可以选择,要怎样创建实体数据模型

注意:这里你可以分别选择一种模型,在下边的框中看到这两种模型的区别,这里不多做解释;

因为我们是从已经有的数据库创建实体模型,所以选择第一种”从数据库生成“

③点击下一步,进入连接数据库的向导,通过新建连接,可以连接到自己的SQLServer服务器,然后选择我们所要连接的数据库,同时会生成实体连接字符串,如下图:

④点击下一步,选择”实体框架版本“

⑤下一步,选择需要在模型中包含的数据库对象,选择”确定所生成对象的单复数形式“,其它保持默认,点击完成。如下图:

这时会在我们的Models文件夹下边生成一个edmx文件,同时EF框架的设计器帮我们生成了根据数据表关系生成的实体类的关系图,如下图:

注意:这里是不是发现这个表跟我们在数据库关系图中看到的图有点相似啊?是的,很相似,但是所表达的意义是不一样的。数据库视图所展示的是数据表之间的关系,而这里展示的EF帮我们根据数据表关系生成的实体类的关系;

2)生成的edmx文件到底是什么?

edmx文件的代码树如下:

①怎么会是XML文件?

我们通过”右键“→”打开方式“→在”XML编辑器“中打开,可以发现这个edmx文件是一个标准的XML文件,其中主要有三大块,描述的就是我们的实体对象和数据库映射的关系。如下图:

 ②.tt文件下怎么生成了.cs文件?

  数据库上下文类。

  在代码树中我们很容易的发现,在.tt文件下边生成了.cs类文件。”OumindBlog.Context.cs“文件的代码和作用如下:

 //继承自DbContext类,
  //数据上下文类,用于操作数据库。负责维护实体状态,以及根据实体对象包装类的状态属性,生成不同的SQL语句执行
  public partial class OumindBlogEntities : DbContext
  {
    public OumindBlogEntities()
      : base("name=OumindBlogEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
      throw new UnintentionalCodeFirstException();
    }

    public DbSet<BlogArticle> BlogArticles { get; set; }
    public DbSet<BlogArticleCate> BlogArticleCates { get; set; }
    public DbSet<BlogUser> BlogUsers { get; set; }
    public DbSet<Enumeration> Enumerations { get; set; }
  }

  实体类。

  而另一个.tt文件生成的类是做什么用呢?我们打开一个看代码:

 //EF按照实体模型生成的实体类
  public partial class BlogArticleCate
  {
    public BlogArticleCate()
    {
      this.BlogArticles = new HashSet<BlogArticle>();
    }

    public int Id { get; set; }
    public int Author { get; set; }
    public string Name { get; set; }
    public string Remark { get; set; }
    public int Statu { get; set; }
    public bool IsDel { get; set; }
    public System.DateTime Addtime { get; set; }

    //生成的外键属性
    public virtual ICollection<BlogArticle> BlogArticles { get; set; }
    public virtual BlogUser BlogUser { get; set; }
  }

很容易的发现这些字段和我们数据库中的字段是对应的,这就是EF按照实体模型生成的实体类,而且在还成了外键属性。

二、使用EF操作数据库

在上面”OumindBlog.Context.cs“中生成继承DbContext的OumindBlogEntities 的类,来维护实体状态,并且操作数据库,所以我们首先要创建该类的对象,并且操作数据的代码如下:

//创建数据库上下文类的对象
    OumindBlogEntities db = new OumindBlogEntities();

    #region 查询文章列表+ActionResult Article()
    /// <summary>
    /// 查询文章列表
    /// </summary>
    /// <returns></returns>
    public ActionResult Article()
    {
      //通过db对象获取文章列表
      db.BlogArticles.Where(p => p.AIsDel == false);//使用Lamabda表达式来获取为被删除的文章

      //使用Lamabda表达式来获取数据
      //返回一个List<T>的对象来存储文章列表
      List < Models.BlogArticle > list= db.BlogArticles.Where(p => p.AIsDel == false).ToList();

      //也可以使用Linq来获取数据
      List<Models.BlogArticle> list1 = (from p in db.BlogArticles where p.AIsDel == false select p).ToList();

      //使用ViewData来传递list对象
      ViewData["DataList"] = list;

      return View();
    }
    #endregion

接着我们为Article创建视图,并且接收数据,
因为我们需要使用BlogArticle对象来显示数据,所以应该首先导入命名空间

<!------------首先导入命名空间------------->>
@using MvcApplication1.Models;
 然后显示数据的代码是:

复制代码
 <!------------获取数据并显示html------------->>
  <div>
    <table id="tbList">
      <tr>
        <th>id</th>
        <th>标题</th>
        <th>分类</th>
        <th>状态</th>
        <th>时间</th>
        <th>操作</th>
      </tr>
      <!--遍历 Action方法 设置给 ViewData 的集合数据,生成HTML代码-->
      @foreach (BlogArticle a in ViewData["DataList"] as List<BlogArticle>)
      {
        <tr>
          <td>@a.AId</td>
          <td>@a.ATitle</td>
          <td>@a.BlogArticleCate.Name</td>
          <td>@a.Enumeration.e_cname</td>
          <td>@a.AAddtime</td>

        </tr>
      }
    </table>
  </div>

运行的结果如下:

三、总结

1)EF框架根据我们的数据库中数据模型生成实体数据模型;

2)实体数据模型为一个edmx文件,且该文件为一个标准的XML文件,主要描述实体对象和数据库映射关系;

3).tt文件为我们生成了数据库上下文类(用于操作数据库)和实体类(表示实体对象和外键属性关系);

4)实体对象可以使用Lamabda表达式或者Linq来查询需要的数据,并且使用一个List对象来存储数据;

5)易于理解代码,在实际的操作中不需要像ADO.net一样创造大量的数据库访问层;

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
, mvc
查询数据
,以便于您获取更多的相关知识。

时间: 2024-08-03 09:09:00

ASP.NET Mvc开发之查询数据_实用技巧的相关文章

浅谈ASP.NET MVC应用程序的安全性_实用技巧

前言:保护Web应用程序的安全性看起来时间苦差事,这件必须要做的工作并不能带来太多的乐趣,但是为了回避尴尬的安全漏洞问题,程序的安全性通常还是不得不做的. 1.ASP.NET Web Forms开发人员   (1)因为ASP.NET MVC不像ASP.NET Web Forms那样提供了很多自动保护机制来保护页面不受恶意用户的攻击,所以阅读本博客来了解这方面的问题,更明确的说法是:ASP.NET Web Forms致力于使应用程序免受攻击.例如: 1)服务器组件对显示的值和特性进行HTML编码,

ASP.NET Mvc开发之EF延迟加载_实用技巧

先来看看定义 EF延迟加载:就是使用Lamabda表达式或者Linq 从 EF实体对象中查询数据时,EF并不是直接将数据查询出来,而是在用到具体数据的时候才会加载到内存. 一.实体对象的Where方法返回一个什么对象? 大家来看一下上一篇文章的代码来分析一下: #region 查询文章列表+ActionResult Article() /// <summary> /// 查询文章列表 /// </summary> /// <returns></returns>

ASP.NET MVC中的AJAX应用_实用技巧

一.ASP.NET MVC中的AJAX应用 首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒): ASP.NET MVC提供了2个常用的ajax辅助方法. Ajax.ActionLink 该辅助方法用于在页面上生成具有ajax功能的超链接. 在该辅助方法中有一个AjaxOptions类型的参数,它包括如下属性: Confirm:在发送ajax请求前,弹出确认对话框,该属性就是设置对话框中的提示消息HttpMethod:用于设置请求的类型:Get|Pos

asp.net微信开发(消息应答)_实用技巧

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上.请注意: 1.关于重试的消息排重,推荐使用msgid排重. 2.微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试.详情请见"发送消息-被动回复消息". 3.为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密.开启加密后,用户发来的消息会被加密,

VS2015 搭建Asp.net core开发环境的方法_实用技巧

前言 随着ASP.NET Core 1.0 rtm的发布,网上有许多相关.net core 相关文章,最近正好有时间就尝试VS2015 搭建Asp.net core开发环境,以下是简单的搭建过程,下面来一起看看吧. 步骤如下 一.首先你得装个vs2015 并且保证已经升级至 update3及以上(此处附上一个vs2015带up3的下载链接: ed2k://|file|cn_visual_studio_enterprise_2015_with_update_3_x86_x64_dvd_892329

详解ASP.NET MVC Form表单验证_实用技巧

一.前言 关于表单验证,已经有不少的文章,相信Web开发人员也都基本写过,最近在一个个人项目中刚好用到,在这里与大家分享一下.本来想从用户注册开始写起,但发现东西比较多,涉及到界面.前端验证.前端加密.后台解密.用户密码Hash.权限验证等等,文章写起来可能会很长,所以这里主要介绍的是登录验证和权限控制部分,有兴趣的朋友欢迎一起交流. 一般验证方式有Windows验证和表单验证,web项目用得更多的是表单验证.原理很简单,简单地说就是利用浏览器的cookie,将验证令牌存储在客户端浏览器上,co

ASP.NET MVC异常处理模块详解_实用技巧

一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行.异常处理应该是一个横切点,所谓横切点就是各个部分都会使用到它,无论是分层中的哪一个层,还是具体的哪个业务逻辑模块,所关注的都是一样的.所以,横切关注点我们会统一在一个地方进行处理.无论是MVC还是WebForm都提供了这样实现,让我们可以集中处理异常. 在MVC中,在FilterConfig中,已经默认帮我们注册了一个HandleErrorAttr

asp.net 多字段模糊查询代码_实用技巧

string strField = "id|className|classAdd"; string strKeyWords = this.tbxKeyWords.Text.Trim(); string strSql = dbexe.searchText("select * from class", strField, strKeyWords); 经常用到多字段的模糊查询,上面的函数可以实现,例如strKeyWords值为""时,可以输出: sel

ASP.NET MVC验证码功能实现代码_实用技巧

前台 复制代码 代码如下: <img id="vcodeimg" src="/Home/VCode" width="70"                                    height="25" />                                 <span                                    style="cursor: p