解析ASP.NET Mvc开发之查询数据实例

原创 2014年01月02日 01:27:07
目录:

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一样创造大量的数据库访问层;




毕业实习交流群:221376964。你也可以关注我的新浪微博进行交流。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MVC简单实现查询列表

学习理论是更好的体现方式应用于实践中.下边是用MVC框架实现的一个简单查询的例子.        先看一下MVC框架的项目目录文件:     在MVC这个项目中,最为关键的就是这三个文...

c# MVC例子学习必看 一个简单的.NET MVC 实例

久闻MVC的大名,只是一直没有去研究过。过去自己用的最多的还是.NET WebForm,比较习惯三层架构。由于最近公司将会使用到MVC框架做一些项目,所以自己也开始接触和学习。看了一些教程,大体搞清楚...

Entity Framework 6.1 学习系列1--概况、安装

Entity Framework:实体框架,看名字就知道是 MSDN上这样

经典ASP.NET MVC3.0入门详解

注:由于本文原在word文档里编写,写本文章时运用了大量截图,直接复制到博客里,没有显示图片, 图片只是一些简单的运行结果截图,不影响大家学习   p.Net MVC已经到第三版了,相信大家也都...

Entity Framework 6.1-Code First

Code First-代码优先,先创建好领域模型。根据

非常简单的语音朗读功能

在System.Speech.Synthesis命名空间下(位于程序集System.Speech中)有一个SpeechSynthesizer类,可以让我们极为轻松地就可以使用系统安装的语音阅读功能。这...

ASP.NET MVC的流程讲解

整篇文章来源于网络,加上自己的理解,希望对ASP.NET的理解,给一个比较全面和系统的说明!

《ASP.NET4从入门到精通》学习笔记5

这个部分吗,可以说是这本书最最没有价值的部分,他自己的作者感觉都没有弄明白,就换乱介绍,而且介绍的不知所云!该部分,只是罗列的目的,建议大家不要细读这个部分的内容,浪费时间而且伤脑筋!(感慨:总是感觉...

JS实现Office在线编辑和浏览(实用)

今天在同事负责的项目中无意间看到一个新颖的功能,点击链接直接以word格式打开,然后感兴趣的追问了下实现方式,看了示例很简单,而且直接页面端js就可调用成功,效果很不错,目前遇到项目还没有类似的应用和...

MVC3分部视图

说到mvc3中的分部视图,不禁联想到webform里面的ascx分部控件,我们在MVC时代可以更加轻松的控制分部视图。MVC中主要分为两大类的分部视图,分别是Html.Partial(partialN...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)