目录:

1)从明源动力到创新工场这一路走来

2)解析ASP.NET WebForm和Mvc开发的区别

-------------------------------------------------------------------------------------------------------

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

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

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

简单的来说就是根据实体对象操作数据表中数据的一种面向对象的操作框架,具体的底层也是调用ADO.NET。具体概念可以参考维基百科(点击我转到)。

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

点击这里可以下载我创建数据库的脚本文件,当然你也可以是使用自己的数据库。

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

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

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

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

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

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

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

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

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

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

这时会在我们的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开发之查询数据实例的更多相关文章

  1. 解析ASP.NET Mvc开发之查询数据实例 分类: ASP.NET 2014-01-02 01:27 5788人阅读 评论(3) 收藏

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 ----------------------------------------------- ...

  2. 解析ASP.NET Mvc开发之删除修改数据

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 3)解析ASP.NET Mvc开发之查询数据实例 4)解析ASP.NET Mvc开发之EF延迟加载 ...

  3. 解析ASP.NET Mvc开发之删除修改数据 分类: ASP.NET 2014-01-04 23:41 3203人阅读 评论(2) 收藏

    目录: 从明源动力到创新工场这一路走来 解析ASP.NET WebForm和Mvc开发的区别 解析ASP.NET 和Mvc开发之查询数据实例 解析ASP.NET Mvc开发之EF延迟加载 ------ ...

  4. 解析ASP.NET Mvc开发之EF延迟加载

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 3)解析ASP.NET Mvc开发之查询数据实例 ------------------------ ...

  5. 解析ASP.NET Mvc开发之EF延迟加载 分类: ASP.NET 2014-01-04 01:29 4017人阅读 评论(1) 收藏

    目录: 从明源动力到创新工场这一路走来 解析ASP.NET WebForm和Mvc开发的区别 解析ASP.NET 和Mvc开发之查询数据实例 ----------------------------- ...

  6. 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. ASP.NET MVC开发:Web项目开发必备知识点

    最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...

  8. 基于C#和Asp.NET MVC开发GPS部标视频监控平台

    基于C#和Asp.NET MVC开发GPS部标监控平台 目前整理了基于.NET技术的部标平台开发文章,可以参考: 1.部标Jt808协议模拟终端的设计和开发 2.C#版的808GPS服务器开发-> ...

  9. ASP.NET MVC动态加载数据

    ASP.NET MVC动态加载数据,一般的做法是使用$.each方法来循环产生tabel: 你可以在html时先写下非动态的部分:  Source Code 上图中,有一行代码: <tbody ...

随机推荐

  1. 1.openssl genrsa

    genrsa用于生成RSA私钥.不会生成公钥,因为公钥提取自私钥,如果需要查看公钥或生成公钥,可以使用openssl rsa命令,后文介绍. man genrsa查询其用法. [root@xuexi ...

  2. 锋利的js之妈妈再也不用担心我找错钱了

    用js实现收银功能. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  3. Scrum会议10.19

    Scrum会议 组名称:好好学习 项目名称:记账本 参会成员:林莉(Master)胡丽娜 宫丽君 汪东涵 时间:2016.10.19 已完成内容: 1.完成新项目的查找,查找学姐的代码和项目. 2.理 ...

  4. RHEL 集群(RHCS)配置小记 -- 文档记录

    1.RHEL 6 集群配置官方管理手册 https://access.redhat.com/site/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/pd ...

  5. 使用Servlet实现图片下载

    package chensi.com; import java.io.FileInputStream; import java.io.IOException; import java.net.URLE ...

  6. javascript 常用方法

    1. 判断某个object中是否包含某个属性: params.hasOwnProperty($scope.dataObj[i].alias) //true 包含 2.删除object中指定属性 del ...

  7. who is the middle

    Description FJ is surveying his herd to find the most average cow. He wants to know how much milk th ...

  8. hd2066一个人的旅行

    Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...

  9. php总体架构图

  10. win7自带windows media player 已停止工作

    解决方法如下: 在计算机开始,菜单找到控制面板 ,然后打开程序和功能,选择打开或关闭window功能,媒体功能.再取消windows Media Center Windows MediaPlayer选 ...