用来保存数据库表格的中一条记录的所有字段的数据,Entity Framework来创建数据访问类
分类:热门新闻

三、达成您的Mode层Model层,正是MVC形式中的数据管理层,用来进行数量和商业贸易逻辑的装封,实行他的两全的时候设计到多少个个概念:------Model类。是实体类。用来保存数据库表格的中一条记下的有着字段的数目。况兼能够作证那条记下数据的完整性。------ModelManager类。是实体类的管理类。常常每三个实体类(Model卡塔尔(قطر‎都要有多少个一见依然的管理类(ModelManager卡塔尔(قطر‎。管理类能够用来治本实体类里面包车型大巴数码纪录(举例删除/加多/改进.....卡塔尔(قطر‎。可是ModelManager类不必然要有相应的Model类。------db类。用来处理对数据库的交接。ModelManager类全数的对数码的操作。都以经过这些db类来促成的。在全数MVC格局中。唯有那几个db类能够平素对数据库实行操作。同时也独有ModelManager类可以对db类举行调用。看上去好象是比较麻烦。可是实际并不复杂。这种Model层设计方式。和网上购物系统的购物车程序是无比雷同的。Model可以作为是购物车上的单个商品的音讯类。Manager能够看作是订单。订单是用来治本买卖的货物的。上边是一个简约的例子。应该是相比较规范的。注重看他的所有事铺排和流程的贯彻。细心切磋一下。其实简单。注意:上面例子使用的全部的类和措施都是通过简化的。实际景况比那几个要复杂的多。然则。作为三个实例已然是十足用了。文件夹构造: |-Db.php|-Model.php|-Manager.php|-ModelTest1.php|-ModelTest2.php|-ModelTest3.php|-ModelTest4.php|-Model/|-Model/ClassModel.php|-Model/StudentModel.php|-Model/ClassManager.php|-Model/StudentManager.php注意文件夹和文书名的大大小小写 内容:假若有三个数据库,保存在两张表,一张是class(班级卡塔尔表格,一张是student(学子State of Qatar的表格, class表格字段:cls_id----------int--------notnullcls_name--------string-----notnullcls_address-----string-----nullstudent表格字段:stu_id----------int--------notnull stu_clsid-------int--------notnull stu_name--------string-----null ClassModel.php里面是class表的贰个实体类ClassModelClassManager.php里面是ClassModel的管住类ClassManagerStudentModel.php里面是student表的一个实体类StudentModelStudentManager.php&n

Asp.Net MVC 模型(使用Entity Framework成立模型类卡塔尔 - Part.1

那篇教程的目的是降解在创设ASP.NET MVC应用程序时,怎么样选择Microsoft Entity Framework来成立数量访谈类。这篇教程借让你事情发生以前对Microsoft Entity Framework未有别的的问询。读完本篇教程,你将会了然什么选拔Entity Framework来抉择、插入、更新和删除数据库记录。

Microsoft Entity Framework是贰个对象关联映射(O/RM)工具,它能你让活动从数据库生成数据访谈层。Entity Framework能够让你免于手工编写制定冗长的数码访问类。

为了演示如何在ASP.NET MVC中采用Microsoft Entity Framework,我们将会创设八个回顾的表率应用程序。大家将会创建多少个Movie数据库应用程序,它同意你出示和编排Movie数据库记录。

那篇教程倘令你有着Visual Studio 二零一零或然Visual Web Developer 二〇〇九及Service Pack1。为了采纳Entity Framework,你需求选取瑟维斯Pack1。你可以从上边的地址下载Visual Studio 二零一零 ServicePack1要么隐含Service Pack1的Visual Web Developer:

NOTE:在ASP.NET MVC和Microsoft Entity Framework之间平素不什么样必然的关系。在ASP.NET MVC中除去选取Entity Framework,你还会有多少个可选的措施。举例,你能够行使别的的O/RM工具,举个例子Microsoft LINQ to SQL,NHibernate也许SubSonic来成立你的MVC模型类。

1.创办Movie楷模数据库

Movie数据库应用程序使用叫做Movies的数据库表格,它富含上面包车型客车列:

列名 数据类型 允许Null 是否主键
Id int False True
Title nvarchar(100) False False
Director nvarchar(100) False False

你能够利用下边步骤将以此表增添到ASP.NET MVC项目中:

  1. 右键点击“解决方案浏览器”中的App_Data文件夹,而且接纳菜单项“增加”,“新建项”。
  2. 在“加多新项(Add New Item)”对话框,选取“SQL Server Database”,将数据库命名字为MoviesDB.mdf,並且点击“增加(Add)”开关。
  3. 双击MoviesDB.mdf文件,张开“服务器能源管理器/数据库财富管理器”窗口。
  4. 进展MoviesDB.mdf数据库连接,右键点击“表”文件夹,而且选取菜单选项“增多新表(Add New Table)”。
  5. 在表设计器中,增加Id、Title和Director列。
  6. 点击“保存(Save)”按键(它有三个软盘的Logo)将新表保存为Movies。

在你创设好Movies数据库表之后,你应为表中增多一些楷模数据。右键点击Movies表,并且选择菜单项“展现表数据(Show Table Data)”。你能够向呈现的网格中输入一些假造的影片多少。

2.创制ADO.NET实体数据模型

为了利用Entity Framework,你要求创立一个实体数据模型(Entity Data Model)。你能够应用Visual Studio实体数据模型向导(Entity Data Model Wizard)来机关从数据库中生成三个实体数据模型。

安份守己下边包车型大巴步子:

  1. 右键点击“建设方案浏览器”窗口中的Models文件夹,并且选取菜单项,“增加(Add)”,“新建项(New Item)”。
  2. 在“增加新项(Add New Item)”对话框中,采用Data分类(如图1)。
  3. 选择ADO.NET Entity Data Model模板,将实体数据模型命名字为MoviesDBModel.edmx,何况点击“增添”按钮。点击“增多”开关将会运维数据模型向导。
  4. 在“选用模型内容(Choose Model Contents)”步骤,选用“从数据库生成(Generate from a database)”选项,并且点击“下一步(Next)”开关(如图2)。
  5. 在“接受数据连接(Choose Your Data Conncetion)”步骤,接收MoviesDB.mdf数据库连接,输入实体的三番五次装置名MoviesDBEntities,並且点击“下一步”按键(如图3)。
  6. 在“接受你的数据库对象(Choose Your Database Object)”步骤,接收Movie数据库表,并且点击“完结”按键(如图4)。

在您完了了这一个步骤之后,将会展开“ADO.NET实体数据模型设计器(实体设计器)”。

图片 1

图1 - 创造八个新的实体数据模型

图片 2

图2 - 选拔模型内容步骤

图片 3

图3 - 选用数据连接

图片 4

图4 - 采取你的数据库对象

3.改进ADO.NET实体数据模型

在开立好实体数据模型未来,你可以运用实体设计器(如图5)来修改模型。通过双击“实施方案浏览器”中Models文件夹中的MoviesDBModel.edmx文件,你能够在此外时候展开实体设计器。

图片 5

图5 - ADO.NET 实体数据模型设计器

举个例证,你能够利用“实体设计器”来改造“实体模型数据向导”生成的类名。向导创建了一个名字为Movies的新的多寡访谈类。换言之,Wizard对这些类的命名与数据库中的表名别无二致。因为大家将会选取这一个类来表示一定的Movie实例,我们应有将以此类由Movies重命名称叫Movie。

比如你想要重命名实体类,你能够在实业设计器的类名上双击,况兼输入三个新的名字(如图6)。只怕,你能够在实体设计器中甄选一个实体,然后在质量窗口中期维订正实体类的名字。

图片 6

图6 - 修正三个实体名

记念在做出改进后点击“保存”按键来保存你的“实体数据模型”。在偷偷摸摸,实体设计器会生成一文山会海的C#类。通过从“设计方案财富微处理器”窗口张开MoviesDBModel.Designer.cs文件,你能够查阅这么些类。

NOTE:绝不在Designer.cs文件中期维修正代码,因为在后一次应用实体设计器时,你的变动将会被遮住。即使您想要扩大定义在Designer.cs中的实体类的职能,那么您能够在独立的文书中开创部分类。

4.行使Entity Framework接收数据库记录

让大家透过创立二个出示movie记录列表的页面来开始塑造大家的Movie数据库应用程序。代码1中的Home调节器公布了一个名称叫Index(卡塔尔的动作。通过利用Entity Framework,Index()动作重临了来自Movie数据库表的享有movie记录。

代码清单1 - ControllersHomeController.cs

using System.Linq;
using System.Web.Mvc;
using MovieEntityApp.Models;

namespace MovieEntityApp.Controllers {

    [HandleError]
    public class HomeController : Controller {
        MoviesDBEntities _db;

        public HomeController() {
            _db = new MoviesDBEntities();
        }

        public ActionResult Index() {
            ViewData.Model = _db.MovieSet.ToList();
            return View();
        }

    }
}

小心到代码1中的调整器含有一个构造函数。那些布局函数起初化了三个类级的字段,叫做_db。_db字段代表着由Microsoft Entity Framework生成的数据库实体。_db字段是贰个MoviesDBEntities类的实例,该实例由“实体设计器”生成。

NOTE:为了在Home调节器中使用MoviesDBEntites类,你必需引进MovieEntityApp.Models命名空间。

在Index(State of Qatar动作中运用了_db字段,用于获取Movies数据库表中的笔录。表明式_db.MovieSet代表了拥有来自Movies数据库表的记录。ToList(卡塔尔(قطر‎方法用于将movies记录集转变为三个Movie对象的泛型群集(List<Movie>)。

movie记录在LINQ to Entities的辅助下取得。代码1中的Index(卡塔尔动作使用了LINQ方德文法(method syntax)来赢得数据库的记录集。倘让你愿意,你也足以采纳LINQ查询语法(query syntax)。上面两行语句完毕了同出一辙的思想政治工作:

ViewData.Model = _db.MovieSet.ToList();
ViewData.Model = (from m in _db.MovieSet select m).ToList();

行让你最有认为的即兴一种LINQ语法――方土耳其共和国语法大概查询语法。这三种方法在性质上未有别的不一样――独一的差距是品格。

代码清单第22中学的视图用于显示movie记录。

代码清单2 - ViewsHomeIndex.aspx

<%@ Page Language="C#" 
  Inherits="System.Web.Mvc.ViewPage<List<MovieEntityApp.Models.Movie>>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ";
<html xmlns="" >
<head runat="server">
    <title>Index</title>
</head>
<body>
    <div>
   
<% foreach (var m in ViewData.Model)
   { %>

    Title: <%= m.Title %>
    <br />
    Director: <%= m.Director %>
    <br />
    <%= Html.ActionLink("Edit", "Edit", new { id = m.Id })%>
    <%= Html.ActionLink("Delete", "Delete", new { id = m.Id })%>
      
        <hr />
<% } %>

<%= Html.ActionLink("Add Movie", "Add") %>
    </div>
</body>
</html>

代码清单第22中学的视图包罗三个foreach循环,它遍历了每三个movie记录,并且出示了movie记录的Title和Director属性的值。注意到在各样记录旁边显示了Edit和Delete链接。除此以外,Add Movie链接呈现在视图的最底层(如图7)。

图片 7

图7 - Index 视图

Index视图是一个种类化视图(typed view)。Index视图包括了叁个<%@ Page %>提醒符,在那之中带有一个Inherits属性,它将Model属性免强调换为了二个Movie对象的强类型泛型列表集合(List<Movie>)。

5.使用Entity Framework插入数据库记录

您能够运用Entity Framework轻易地将新记录插入到数据库表中。代码清单3包罗了多个增加到Home调整器类中的新动作,你能够接纳它们来将新记录插入到Movie数据库表中。

代码清单3 - ControllersHomeController.cs(Add方法)

public ActionResult Add() {
    return View();
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(FormCollection form) {

    var movieToAdd = new Movie();

    // Deserialize (Include white list!)
    TryUpdateModel(movieToAdd, new string[] { "Title", "Director" }, form.ToValueProvider());

    // Validate
    if (String.IsNullOrEmpty(movieToAdd.Title))
        ModelState.AddModelError("Title", "Title is required!");
    if (String.IsNullOrEmpty(movieToAdd.Director))
        ModelState.AddModelError("Director", "Director is required!");

    // If valid, save movie to database
    if (ModelState.IsValid)
    {
        _db.AddToMovieSet(movieToAdd);
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

    // Otherwise, reshow form
    return View(movieToAdd);
}

首先个Add(卡塔尔动作轻松地重返了四个视图。这些视图包括了多少个用来增加新movie数据库记录的表单(如图8)。当您付出表单时,将会调用首个Add(卡塔尔动作。

在乎到第1个Add(State of Qatar动作使用AcceptVerbs特性进行了修饰。那个动作唯有在推行HTTP POST操作的时候才会被调用。换言之,这么些动作独有在交付一个HTML表单的时候会被调用。

其次个Add(卡塔尔(قطر‎动作在ASP.NET MVC TryUpdateModel(卡塔尔(قطر‎方法的相助下创建了二个Entity Framework Movie类的新实例。TryUpdateModel(卡塔尔国方法接收传递给Add(卡塔尔国方法的FormCollection的字段,並且将那么些HTML表单字段的值赋值给Movie类。

NOTE:运用Entity Frmaework时,当用TryUpdateModel或然UpdateModel方法改善一个实体类的质量时,你必得提供一性子能的“白名单”。

接下去,Add(卡塔尔动作施行了部分轻便的表单验证。该动作验证了Title和Director属性都有值。即使现身三个验证错误,那么八个表达错误音信将会增多到ModelState。

一经未有证实错误,那么在Entity Framework的帮助下,二个新的movie记录将会加多到Movies数据库表。新的笔录使用下边两行代码增加到数据库中:

_db.AddToMovieSet(movieToAdd);
_db.SaveChanges();

代码的率先行将新的Movie实体增添到由Entity Framework所追踪的movies集中。代码的第二行将具备对Movies的校正保留到底层的数据库中。

图片 8

图8 - Add 视图

6.施用Entity Framework更新数据库记录

你大概能够根据与大家刚刚插入叁个新数据库记录同一的点子来选择Entity Framework编辑一条数据库记录。代码项目清单4满含了八个新的调节器动作,叫做Edit(卡塔尔。第一个Edit(卡塔尔国动作再次来到了三个HTML表单,用于编辑一条movie记录。第一个艾德it(卡塔尔国动作试图更新数据库。

代码清单4 - ControllersHomeController.cs(Edit方法)

public ActionResult Edit(int id)
{
    // Get movie to update
    var movieToUpdate = _db.MovieSet.First(m => m.Id == id);

    ViewData.Model = movieToUpdate;
    return View();
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(FormCollection form)
{
    // Get movie to update
    var id = Int32.Parse(form["id"]);
    var movieToUpdate = _db.MovieSet.First(m => m.Id == id);

    // Deserialize (Include white list!)
    TryUpdateModel(movieToUpdate, new string[] { "Title", "Director" }, form.ToValueProvider());

    // Validate
    if (String.IsNullOrEmpty(movieToUpdate.Title))
        ModelState.AddModelError("Title", "Title is required!");
    if (String.IsNullOrEmpty(movieToUpdate.Director))
        ModelState.AddModelError("Director", "Director is required!");

    // If valid, save movie to database
    if (ModelState.IsValid)
    {
        _db.SaveChanges();
        return RedirectToAction("Index");
    }

    // Otherwise, reshow form
    return View(movieToUpdate);
}

第二个Edit(State of Qatar动作早先时从数据库中获取一条与要编写的movie的Id相相称的Movie记录。下边包车型客车LINQ to Entities语句获取了合作这一特定Id的首先条数据库记录。

var movieToUpdate = _db.MovieSet.First(m => m.Id == id);

接下去,TryUpdateModel(State of Qatar方法用于将HTML表单域的值赋给movie实体的性质。注意到提供了三个白名单,用于钦命更新哪些字段。

下一步,试行了有个别简约的校验来验证Movie的Title和Director属性都有值。假诺此外一个性能缺乏值,那么三个校验错误新闻将会增添到ModelState,何况ModelState.IsValid将会回来false值。

末段,若无校验错误,那么通过调用SaveChanges(卡塔尔(قطر‎方法,底层的Movies数据库表将会更新。

当编辑数据库记录时,你需求向实施数据库更新的调整器动作传递要举办更新的笔录的Id。不然,调控器动作将不可能知晓更新底层数据库的哪一个笔录。代码清单5中的Edit视图,含有二个隐身的表单域,它象征了将在编辑的数据库记录的Id。

代码清单5 - ViewsHomeEdit.aspx

<%@ Page Language="C#"
  Inherits="System.Web.Mvc.ViewPage<MovieEntityApp.Models.Movie>" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ";
<html xmlns="" >
<head runat="server">
    <title>Edit</title>
    <style type="text/css">
   
    .input-validation-error
    {
        background-color:Yellow;
    }
   
    </style>   
</head>
<body>
    <div>

<h1>Edit Movie</h1>

<form method="post" action="/Home/Edit">

    <!-- Include Hidden Id -->
    <%= Html.Hidden("id") %>

    Title:
    <br />
    <%= Html.TextBox("title") %>
   
    <br /><br />
    Director:
    <br />
    <%= Html.TextBox("director") %>
   
    <br /><br />
    <input type="submit" value="Edit Movie" />
</form>
   
    </div>
</body>
</html>

7.利用Entity Framework删除数据库记录

在这里篇教程中大家所需消除的终极一个数据库操作,正是剔除数据库记录了。你能够选替代码清单6中的调控器动作来删除叁个一定的数据库记录。

代码清单6 - ControllersHomeController.cs(删除操作卡塔尔(قطر‎

public ActionResult Delete(int id) {
    // Get movie to delete
    var movieToDelete = _db.MovieSet.First(m => m.Id == id);

    // Delete
    _db.DeleteObject(movieToDelete);
    _db.SaveChanges();

    // Show Index view
    return RedirectToAction("Index");
}

Delete(State of Qatar动作首先获得叁个Movie实体,该实体与传递给动作的Id相相配。接下来,通过调用DeleteObject(卡塔尔(قطر‎方法和随之的SaveChanges(卡塔尔国方法,Movie从数据库中除去掉了。最后,客商被重定向到了Index视图。

8.总结

本篇教程的指标是以身作则怎么样使用ASP.NET MVC和Microsoft Entity Framework来创立数据库驱动的Web应用程序。你读书到了何等制造应用程序,允许你进行分选、插入、更新和删除数据库记录。

率先,大家谈谈了怎样使用实体数据模型向导(Entity Data Model Wizard)从Visual Studio中生成贰个实体数据模型。接下来,你学习了什么样运用LINQ to Entities来从三个数据库表中获取一系列数据库记录。最后,我们运用了Entity Framework来插入、更新和删除数据库记录。

 

 

 

Asp.Net MVC 模型(使用LINQ to SQL创建Model类) - Part.2

这篇教程的目标是解说一种为ASP.NET MVC应用程序成立模型类的主意。在这里篇教程中,你会学习到哪些接受Microsoft LINQ to SQL创制模型类并实行数据库访谈。

在此篇教程中,大家创立了多个骨干的Movie数据库应用程序。大家尽量地用最飞快和最简易的点子创制Movie数据库应用程序作为开头。我们平素从调节器动作中举行了具有的数量访谈。

接下去,你会学习怎么样使用Repository形式。使用Repository方式须要越多的一些行事。可是,选择那一个形式的亮点是它同意你成立能够适应变化而且测量检验简单的应用程序。

1.什么是Model类

MVC模型富含了有着MVC视图只怕MVC调控器未有包罗的应用程序逻辑。极度地,八个MVC模型包涵了具备的应用程序业务和数码访谈逻辑。

您能够行使精彩纷呈不一样的技艺来落实您的数额访谈逻辑。举例,你能够使用Microsoft Entity Framework、NHibernate、Subsonic恐怕ADO.NET类来创设你的数据访谈类。

在此篇教程中,小编使用LINQ to SQL来询问和换代数据库。LINQ to SQL为你提供了一种与Microsoft SQL Server数据库实行相互作用的特别轻便的措施。但是,精通ASP.NET MVC框架丝毫未曾局限于LINQ to SQL是卓殊关键的。ASP.NET MVC与其他的数额访谈技艺都以相配的。

2.创办八个Movie数据库

在这里篇教程中,为了演示怎么着创设模型类――大家成立了三个简易的Movie数据库应用程序。第一步是成立三个新的数据库。在缓慢解决方案浏览器窗口的App_Data文件夹上点击右键,接受菜单项“加多(Add)”,“新建项(New Item)”。选取SQL Server Database模板,命名叫MoviesDB.mdf,而且点击“增加(Add)”按键(如图1)。

图片 9

图1:增多多少个新的SQL Server Database

在你创制那一个新的数据库以往,能够经过在App_Data文件夹中双击MoviesDB.mdf文件来展开数据库。双击MoviesDB.mdf文件会张开“服务器财富微处理器(Server Explorer)”窗口(如图2)。

当使用Visual Web Developer时,“服务器财富管理器”叫做“数据库能源微型机(Database Explorer)”。

图片 10

图2:使用“服务器财富微型机”窗口

咱俩要求在数据库中加多二个表,这几个表代表电影。右键点击Tables文件夹,並且选择菜单项“增加新表(Add New Table)”。采取那一个菜单项会展开“表设计器(Table Designer)”(如图3)。

图片 11

图3:表设计器

大家要求向我们的数据库表增多上边包车型大巴列:

列名 数据类型 允许Null
Id Int False
Title Nvarchar(200) False
Director Nvarchar(50) False

你须要对Id列做两件极度的事务。首先,你须求通过在表设计器中甄选列,而且点击钥匙Logo,将Id列标志为主键列。当对数据库进行插队可能更新时,LINQ to SQL供给您内定主键列。

接下去,你须要经过将IsIdentity属性赋值为Yes值,来将Id列标志为Identity列(如图3)。每当你向表中增添一行新数据时,Identity列会自动地赋叁个新的数字。

3.创建LINQ to SQL类

咱俩的MVC模型类将会含有LINQ to SQL类,那个LINQ to SQL类代表着tblMovie数据库表。创设LINQ to SQL最简便的措施就是右键点击Models文件夹,选用“加多(Add)”,“新建项(New Item)”,采取LINQ to SQL类模板,将类命名称叫Movie.dbml,何况点击“增多”开关(如图4)。

图片 12

图4:创建LINQ to SQL类

在我们创造好Movie LINQ to SQL 类之后,会立即出现“对象关系设计器(Object Relational Designer)”。你可以将数据库表从“服务器能源微机(Server Explorer)”窗口中拖曳到“对象关联设计器”中,来创立代表着一定数据库表的LINQ to SQL类。大家须要增多tblMovie数据库表到“对象关联设计器”中(如图5)。

图片 13

图5:使用“对象关系设计器”

暗中同意景况下,“对象关联设计器”成立的类与您拖曳到设计器中的数据库表名完全相符。但是,大家不想管我们的类叫做tblMovie。因而,在设计器中式点心击类名,并且将类名改为Movie。

终极,记得点击“保存(Save)”按键来保存LINQ to SQL类。不然,LINQ to SQL类将不会由“对象关联设计器”生成。

4.在调节器动作中利用LINQ to SQL

今天我们早就具有了LINQ to SQL类,大家得以接受那个类从数据库中获取数据。在本节中,你会学习怎么直接在调控器动作中利用LINQ to SQL类。大家将会在贰个MVC视图中突显来自tblMovies数据库表中的摄像列表。

率先,大家供给转移HomeController类。这么些类能够在你应用程序中的Controllers文件夹中找到。改正那个类,使得它像代码清单1所示的那样。

代码清单1 - ControllersHomeController.cs

using System.Linq;
using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers{

     [HandleError]
     public class HomeController : Controller {

          public ActionResult Index(){

               var dataContext = new MovieDataContext();
               var movies = from m in dataContext.Movies
                    select m;
               return View(movies);
          }
     }
}

代码清单1中的Index(State of Qatar动作使用了LINQ to SQL DataContext类(MovieDataContext)来表示MoviesDB数据库。MovieDataContext类由Visual Studio“对象关系设计器”生成。

Index(卡塔尔国动作推行了一个对DataContext的LINQ查询,用于从tblMovies数据库表中获取具有的影片。电影列表被赋给了叁个称为movies的本地变量。最终,电影列表通过视图数据传递给了视图。

为了体现电影列表,大家接下去须求更改Index视图。你能够在ViewsHome文件夹下找到Index视图。更新Index视图,让它和代码清单第22中学的视图肖似。

代码清单2 - ViewsHomeIndex.aspx

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Views.Home.Index" %>
<%@ Import Namespace="MvcApplication1.Models" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">

     <ul>
          <% foreach (Movie m in (IEnumerable)ViewData.Model)
          { %>
               <li> <%= m.Title %> </li>
          <% } %>
     </ul>
</asp:Content>

只顾到校订后的Index视图在其顶端包括一个<%@import namespace%>提示符。这一个提醒符引进了MvcApplication1.Models命名空间。为了管理model类,大家需求以此命名空间,尤其是――视图中的Movie类。

代码清单第22中学的视图富含一个foreach循环,它遍历了具有由ViewData.Model属性所表示的项。显示了每二个movie的Title属性的值。

只顾到ViewData.Model属性被胁持转变为了四个IEnumerable。为了遍历ViewData.Model的剧情,这一个是必须的。另三个选用是成立贰个强类型的视图。当您创制二个强类型的视图时,你将ViewData.Model属性强迫转变为视图的前置代码类中的特定项目。

一旦你在校订了HomeController类和Index视图后运转应用程序,你将会赢得一个空白页。你之所以获得一个空白页,是因为在tblMovies数据库表中未有movie记录。

为了向tblMovies数据库表中加多记录,右键点击“服务器能源微电脑”窗口(在Visual Web Developer中称之为“数据库能源微电脑”)中的tblMovies数据库表,並且选取菜单项“显示表格数据(Show Table Data)”。你可以使用所呈现的网格来插入movies记录(如图6)。

图片 14

图6:插入影视

在您向tblMovies表中加多了有的数据库记录未来,并且运维应用程序,你将会看见图7所示的页面。全体的movie数据库记录都显示在了体系标识列表中。

图片 15

图7:使用Index视图显示电影

5.使用Repository模式

在近日一节中,我们直接在四个调控器动作中选择了LINQ to SQL。我们向来从Index(卡塔尔国调节器动作中使用了MovieDataContext类。对于七个大致的应用程序来讲,那从没什么样难点。可是,当您要求营造特别复杂的应用程序时,间接在决定器类中拍卖LINQ to SQL会导致局地难点。

在支配器类中运用LINQ to SQL会使现在切换数据访谈技能时现身困难。举例,你或许想将Microsoft LINQ to SQL切换为使用Microsoft Entity Framework,来作为你的多少访谈技能。在此种情况下,你须求在应用程序中重写每二个做客数据库的调控器。

在支配器类中使用LINQ to SQL也使得为应用程序创制单元测量检验更为艰辛。日常,在实行单元测验时,你无需与数据库进行互相。你想要使用单元测量试验来测验你的应用程序逻辑,而非你的数据库服务器。

为了创设特别适应将来生成以至愈发便于测验的MVC应用程序,你应该考虑使用Repository方式。当您利用Repository格局时,你会创制多个独门的repository类,它富含了有着的数据访问逻辑。

当您制造repository类时,你创制了贰个接口,该接口代表着独具由repository类所使用的主意。在您的调控器中,你针对接口编写代码,实际不是针对repository。通过这种办法,你现在可以接纳不一样的多少访问本事来贯彻repository。

代码清单3中的接口命名称叫了IMovieRepository,而且它富含了三个措施,叫做ListAll(卡塔尔(قطر‎。

代码项目清单3 - ModelsIMovieRepository.cs

using System.Collections.Generic;
namespace MvcApplication1.Models{

     public interface IMovieRepository {
          IList<Movie> ListAll();
     }
}

代码清单4中的repository类完毕了IMovieRepository接口。注意到它含有了叁个誉为ListAll(State of Qatar的法子,该格局与IMovieRepository接口所供给的办法相呼应。

代码项目清单4 - ModelsMovieRepository.cs

using System.Collections.Generic;
using System.Linq;

namespace MvcApplication1.Models {
    public class MovieRepository : IMovieRepository {
        private MovieDataContext _dataContext;

        public MovieRepository() {
            _dataContext = new MovieDataContext();
        }

        #region IMovieRepository Members

        public IList<Movie> ListAll() {
            var movies = from m in _dataContext.Movies
            select m;
            return movies.ToList();
        }

        #endregion
    }
}

末段,代码清单5中的MoviesController类使用了Repository方式。它不再直接行使LINQ to SQL类。

代码清单5 - ControllersMoviesController.cs

using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers {

    public class MoviesController : Controller {
        private IMovieRepository _repository;

        public MoviesController() : this(new MovieRepository()) { }

        public MoviesController(IMovieRepository repository) {
            _repository = repository;
        }

        public ActionResult Index() {
            return View(_repository.ListAll());
        }
    }
}

小心到代码项目清单5中的MoviesController类有八个布局函数。第二个布局函数,无参数的布局函数,在您应用程序运维时调用。这么些构造函数创造了一个MovieRepository类的实例,并把它传递给了第三个布局函数。

其次个布局函数独有八个参数:二个IMovieRepository参数。那么些构造函数简单地将参数的值赋给了号称_repository的类级字段。

MoviesController类利用了软件设计方式中称作注重注入(Dependency Injection)的格局。极度地,它选用了布局函数信任注入(Constructor Dependency Injection)。你能够因而阅读上边那篇由MartinFowler所作的稿子,来读书越来越多关于那个形式的消息:

注意到MoviesController类中具有的代码(除了第4个布局函数)都与IMovieRepository接口举行相互,实际不是事实上的MovieRepository类。代码与几个抽象的接口交互作用,并非与接口的切实完成彼此之间。

倘使您想要纠正应用程序所使用的数量访谈逻辑,那么您可以省略地用三个类完成IMovieRepository接口,该类应用区别的数据库访谈工夫。举个例子,你能够成立一个EntityFrameworkMovieRepository类,只怕一个SubSonicMovieRepository类。因为调整器类针对接口编制程序,你能够向决定器类传递叁个IMovieRepository的新达成,并且那些类将袭承职业。

除此以外,借让你想要测验MoviesController类,那么您能够向HomeController传递多个伪movie Respository类。你可以应用二个实际并从未访问数据库,可是包蕴了有着IMovieRepository接口所需求的章程的类来促成IMovieRepository。通过这种方法,你可以对MoviesController类举办单元测量试验,而没有必要实际地拜访二个真的的数据库。

6.小结

那篇教程的目标是身体力行怎样使用Microsoft LINQ to SQL创立MVC模型类。我们解释了在ASP.NET MVC应用程序中展现数据库数据的三种政策。首先,大家平素在调整器动作中开创和平运动用了LINQ to SQL类。在调控器中动用LINQ to SQL类令你能够十分的快且便于地在MVC应用程序中展现数据库数据。

接下去,大家追查了二个有个别困难一点儿,但相对是一个越来越好的门径来突显数据库数据。大家采纳了Repository形式,而且将具有的数据库逻辑都坐落了贰个单独的repository类中。在我们的调整器中,大家编辑的全部代码都以针对性多个接口,而非贰个实体类。Repository形式的优点是它同意大家轻巧地在其后退换多少访谈本领,况兼同意我们轻便地质衡量试大家的调整器类。

 

 

 

 

Asp.Net MVC 视图(呈现数据库数据表格卡塔尔国 - Part.3

在这里篇教程中,作者身体力行了体现一多种数据库记录的多个主意。作者上行下效了在一个HTML表格中格式化一层层数据库记录的七个措施。首先,小编身教重于言教了怎么直接在视图中格式化数据库记录。接下来,作者身体力行了什么在格式化数据库记录时使用部分类。

1.1成立模型类

咱俩就要彰显Movies数据库表中的一二种记录。Movies数据库表包罗上面包车型客车列:

Column Name Data Type Allow Nulls
Id Int False
Title Nvarchar(200) False
Director NVarchar(50) False
DateReleased DateTime False

为了表示Movies数据库表,大家将选拔Linq to SQL作为大家的多少访谈技能。换言之,大家将会利用LINQ to SQL来绑定大家的MVC模型类。

创办一五光十色LINQ to SQL类的最快办法正是行使Visual Studio Object Relational Designer(Visual Studio 对象关系设计器)。右键点击Models文件夹,接收“Add(加多)”,“New Item(新建项)”,选择Linq To Sql类模板,将那一个类命名叫Movie.dbml,並且点击Add按键(如图1)。

图片 16

图1:创建LINQ to SQL类

在您创建完Movie Linq to Sql 类今后,会应声现身对象关系设计器。你能够将数据库表从服务器浏览器(Server Explorer)窗口中拖曳到目的关系设计器中,以便成立代表着一定数据库表的Linq to Sql类。你要求将Movies数据库表增添到目的关联设计器中(如图2)。

图片 17

图2:使用对象关联设计器

暗许情状下,对象关系设计器将会考虑创设八个类名,该类名是数据库表名的单数版本。换言之,就算你有四个叫作Customers的数额库表,那么对象关系设计器将会创制三个可以称作Customer的类名。

平凡,对象关联设计器特别切合完毕这事。不幸的是,对象关联设计器将数据库表名Movies转变为了Movy(十分的帅似,不过错的)。通过在设计器中的类名上点击,而且将类名由Movy改为Movie,你能够相当的轻易地校正这一个标题。

终极,记得点击“Save(保存)”(软盘Logo)开关来保存LINQ to SQL类。不然的话,LINQ to SQL类将不会由对象关系设计器生成。

1.2 在调控器动作中采纳LINQ to SQL

当今我们早就有了LINQ to SQL类,大家得以运用那个类从数据库获取数据。代码项目清单1中的调控器类使用LINQ to SQL类获取来自Movies数据库表的笔录。

代码清单1 – ControllersHomeController.cs

using System.Linq;
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers{

    [HandleError]
    public class HomeController : Controller {
        public ActionResult Index() {
            var dataContext = new MovieDataContext();
            var movies = from m in dataContext.Movies
            select m;
            return View(movies);
        }
    }
}

代码项目清单1中的Index(卡塔尔国动作使用LINQ to SQL MovieDataContext类来博取来自数据库表中的影片。电影列表被传送给了Index视图,作为ViewData.Model属性的值。

1.3 在视图中举办格式化

格式一多级数据库记录最简便、但不必然是最棒的办法,正是一向在视图中实践格式化。举例,代码清单2中的Index视图在叁个HTML表格中表现了movie数据库的笔录。

代码项目清单2 – ViewsHomeIndex.aspx

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Views.Home.Index" %>
<%@ Import Namespace="MvcApplication1.Models" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">

<table>
<tr>
     <th>Id</th><th>Title</th><th>Release Date</th>
</tr>
<% foreach (Movie m in (IEnumerable)ViewData.Model)
{ %>
<tr>
     <td><%= m.Id %></td>
     <td><%= Html.Encode(m.Title) %></td>
     <td><%= m.DateReleased %></td>
</tr>
<% } %>
</table>

</asp:Content>

代码清单第22中学的视图满含了叁个foreach循环,该循环遍历了movie记录集中的每叁个记下。Movie的每二个属性值都显示在了独家的表格单元格中。表格的行由HTML <tr>标签创立,表格单元格由HTML <td>标签成立。

注意到Html.Encode(卡塔尔支持方法用于在体现每一个属性值之前对其开展编码。任曾几何时候当你选用客商输入,而且将输入重新展现在网页上时,对输入进行编码以阻止JavaScript注入攻击都以很关键的。当您对呈现HTML内容前对它进行编码漠不爱护时,黑客便可以做一些黑心且邪恶的作业,举个例子从您的网址客商中偷走私人数据。

当你运行应用程序,Index视图会呈现如图3所示的页面。

图片 18

图3:使用HTML表格格式化了的数据库记录

图3中HTML表格的格式化并不那么令人喜悦。大家得以因此创办层叠样式表来改正HTML表格的外观。因为代码清单第22中学的视图是一个content视图,我们亟须将层叠样式表增多到与content视图相关联的沙盘模拟经营页中。这一个模板页位于上面路线:

ViewsSharedSite.master

为了精耕细作HTML表格的外观,大家能够将代码项目清单3中的样式表加多到模板页<head>的开闭标签之间。

代码清单3 – 层叠样式表

<style type="text/css">
table
{
     border-collapse:collapse;
}

table td, table th
{
     border: solid 1px black;
     padding:10px;
}
</style>

代码清单3中的样式表将单元格之间的边框合并起来,何况加多了网格(gridlines)。在你将这些样式表增添到模板页之后,Index视图展现出图4中的页面。

图片 19

图4:动用了体制的HTML表格

1.4 在部分中格式化

除了在视图自个儿中实践全数的格式化以外,你能够运用部分页面(partial)作为贰个模板来格式化每七个数据库记录。比方,代码清单4中的局地页面代表着对于三个一定movie数据库记录的格式化。

代码项目清单4 –ViewsMoviesMovieTemplate.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MovieTemplate.ascx.cs" Inherits="MvcApplication1.Views.Movies.MovieTemplate" %>
<tr>
     <td> <%=ViewData.Model.Id%></td>
     <td> <%=Html.Encode(ViewData.Model.Title)%></td>
     <td> <%=ViewData.Model.DateReleased.ToString("D")%></td>
</tr>

代码清单4中的模板将每一种movie记录格式化为叁个HTML表格行。模板应用到每三个数据库记录上。注意到ViewData.Model属性,坐落于局部页面中,代表着单个数据库记录,实际不是负有的数据库记录集。

为了将ViewData.Model属性调换为Movie类的实例,你供给为这一个有些页面创设三个代码前置类。代码项目清单5中的代码前置类钦赐了MovieTemplate部分类世袭自叁个泛型类,该泛型类将Movie作为它的品种参数。

代码清单5 - ViewsMoviesMovieTemplate.ascx.cs

using MvcApplication1.Models;
namespace MvcApplication1.Views.Movies
{
     public partial class MovieTemplate : System.Web.Mvc.ViewUserControl<Movie>
     {
     }
}

MovieTemplate类世袭自ViewUserControl<movie>类。因为MovieTemplate类世袭自这么些类,ViewData.Model属性自动调换为Movie。

代码项目清单6中的Index视图演示了哪些在视图中央银行使MovieTemplate部分类。Html.RenderPartial(卡塔尔国方法用于呈现MovieTemplate局地页面。

代码清单 6 – ViewsMoviesIndex.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MvcApplication1.Views.Movies.Index" %>
<%@ Import Namespace="MvcApplication1.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<table>
<tr>
     <th>Id</th><th>Title</th><th>Release Date</th>
</tr>
     <% foreach (Movie m in (IEnumerable)ViewData.Model)
     {
          Html.RenderPartial("MovieTemplate", m);  
     } %>
</table>

</asp:Content>

在代码清单6中,Html.RenderPartial(卡塔尔(قطر‎方法用于为各类Movie记录显示MovieTemplate局地页面。多少个参数字传送递给了RenderPartial(State of Qatar方法。第4个参数是快要展现的有的页面包车型大巴称号。和视图相近,暗许情形下,局地页面必需放在ViewsControlName 文件夹大概是 ViewsShared文件夹。

其次个参数钦定了传递给一些的视图数据。在局地页面内部,ViewData.Model属性将会意味着叁个一定的Movie记录。

还会有三个最首要的警报。与好些个其他赞助方法差异,Html.RenderPartial(State of Qatar方法并不会回去三个字符串。这表示你不能够像上面那样调用Render帕特ial(卡塔尔方法:

<%= Html.RenderPartial("MovieTemplate", m) %>

相反,你应当如此调用那些措施:

<% Html.RenderPartial("MovieTemplate", m) %>

RenderPartial(State of Qatar方法成功了某件事务,但它不会代表出来。

1.5 小结

那篇教程的目标是言传身教怎样在二个HTML表格中展现一多级的数据库记录。大家查究了格式化数据库记录的几个点子。首先,我们一贯在多个视图中格式化数据库记录。接下来,大家选拔多少个有的页面作为模板来格式化每多个数据库记录。

 

摘自:

本文由威尼斯在线注册平台发布于热门新闻,转载请注明出处:用来保存数据库表格的中一条记录的所有字段的数据,Entity Framework来创建数据访问类

上一篇:php 遍历目录 下一篇:以前真没在意cookie的作用域问题,能自动完成另一个域名的登录
猜你喜欢
热门排行
精彩图文