zoukankan      html  css  js  c++  java
  • MVC神韵你想在哪解脱!(七)

    添加一个模型

    在本节中我们将追加一些类来管理数据库中的电影。这些类将成为我们的MVC应用程序中的模型部分。

    我们将使用被称之为“Entity Framework”的数据访问技术来定义这些模型类,并使用这些类来进行操作。Entity Framework(通常被简称为“EF”支持一个被称之为“code-first”的开发范例。Code-first允许你通过书写一些简单的类来创建模型对象。你可以通过访问这些类的方式来访问数据库,这是一种非常方便快捷的开发模式。

    4.1 利用NuGet来安装EFCodeFirst

    我们可以利用NuGet包管理器(安装ASP.NET MVC3时会自动安装)来把EFCodeFirst类库添加到我们的MvcMovie工程中。这个类库使得我们可以直接使用code-first。点击工具菜单下的“Library Package Manager”子菜单下的Add Library Package Reference菜单选项,如图所示。

    点击“Add Library PackageReference”菜单选项后,将会弹出一个对话框,标题为Add Library Package Reference,如图

    默认状态下,左边的“All”选项处于选择状态。因为还没有安装任何包,所以右边面板中显示“找不到任何项”。点击左边面板中的online选项,NuGet包管理器将会在服务器上检索所有当前能够获取的包。服务器上有几百个当前能够获取的包,现在我们只关注EFCodeFirst包。在右上角的搜索输入框中输入“EFCode”。在检索结果中,选择EFCodeFirst包,并且点击Install按钮安装包,

    点击了install按钮后,会弹出一个接受许可证窗口,在这个窗口中必须要点击“I Accept”按钮,接受许可证条款,安装才能继续进行。

    安装完毕后,点击close按钮。我们的MvcMovie工程中会自动加载EntityFramework程序集,其中包含EFCodeFirst类库。

    添加模型类

    在解决方案资源管理器中,鼠标右击Models文件夹,点击“添加”菜单下的“类”,如图所示。

    点击“类”菜单项后,会弹出“添加新项”对话框,在该对话框中将类名命名为“Movie”,如图:

    然后点击添加按钮,观察解决方案资源管理器中,Models文件夹下添加了一个Movie.cs类定义文件,并且该文件呈打开状态,

     

    在Movie.cs文件中追加如下所示的五个属性。

    public class Movie{

    public int ID { get; set; } 

    public string Title { get; set; }

    public DateTime ReleaseDate { get; set; }

    public string Genre { get; set; }

    public decimal Price { get; set; }

    }

    我们将利用Movie类来代表数据库中的movie(电影)。每一个Movie对象的实例对应于数据表中的一行,Movie类中的每一个属性被映射到数据表的每一列。在同一个Movie.cs文件中,追加如下所示的MovieDBContext类。

      public class MovieDBContext : DbContext   //Linq连接数据库系列必须用的类

     {

      public DbSet<Movie> Movies { get; set; } 

    }

    MovieDBContext类代表了Entity Framework中的movie数据库的上下文对象,用来处理数据的存取与更新。MovieDBContext对象继承了Entity Framework中的DbContext基础类。为了能够引用DbContext类,你需要在Movie.cs文件的头部追加如下所示的using语句。 注:还记得DataContext基础类了么!

    using System.Data.Entity;

    完整的Movie.cs文件中的代码如代码所示:

    using System;

    using System.Data.Entity;

    namespace MvcMovie.Models

    { public class Movie

      {   public int ID { get; set; }

          public string Title { get; set; }

          public DateTime ReleaseDate { get; set; }

          public string Genre { get; set; }

          public decimal Price { get; set; }

       }

       public class MovieDBContext : DbContext

       {

          public DbSet<Movie> Movies { get; set; } // 实体类对象都保存在DbSet<T>里

         }

    }

     

    如果要从数据库中存取数据,类似以上所示的代码是必须要写的。在下一节中,我们将要创建一个新的MoviesController类,用来显示数据库中的数据,并且允许用户创建一个新的movie(电影)的列表。

    附录:课下思考

    LINQ to SQL和Entity Framework对比

          LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术。他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦。使用EF,我们查询的对象不再是完全对应数据库架构的C#类,而是更高层的抽象:Entity Data Model。这为我们提供了额外的灵活性,但是在性能和简单性上面也会有所损失。

    LINQ to SQL由C#团队开发并在.NET Framework 3.5中发布,而Entity Framework由ADO.NET团队开发并作为.NET Framework 3.5 Service Pack 1的一部分发布。此后,LINQ to SQL由ADO.NET团队接手,其结果是:在.NET 4.0中,ADO.NET团队更加专注于EF的改进,相对来说,LINQ to SQL的改进要小得多。

    LINQ to SQL和Entity Framework各有所长,LINQ to SQL是一个轻量级的ORM框架,旨在为Microsoft SQL Server数据库提供快速的应用程序开发,其优点是易于使用、简单、高性能。而Entity Framework的优点在于:其为创建数据库架构和实体类之间的映射提供了更好的灵活性,它还通过提供程序支持除了SQL Server之外的第三方数据库。

    EF 4.0一个非常受欢迎的改进是它现在支持与LINQ to SQL几乎同样的查询功能。这意味着我们在系列文章中的LINQ-to-db查询可以同时适用于EF 4.0和L2S。而且,这也使得L2S成为我们学习使用LINQ查询数据库的理想技术,因为其保持了对象关系方面的简单性,并且我们学习到的查询原则和技术同样适用于EF。

    说明:.使用EF则建议使用.NET 4.0(VS2010)以上的版本,该版本有成熟完整的EF。

     

     

     

     

  • 相关阅读:
    Redis的四种模式,单机、主从、哨兵、集群
    .NET 跨域问题
    C# 利用正则表达式获取富文本框中所有图片路劲
    ActiveMQ入门实例(.NET)
    ActiveMQ的使用以及应用场景
    关于消息队列的使用方法(RocketMQ)
    Redis系列 需要注意事项
    .NET:在线悲观锁、在线乐观锁、离线悲观锁、离线乐观锁代码示例
    C# 简单介绍Redis使用
    API Get跟Post 的区别?
  • 原文地址:https://www.cnblogs.com/sonykings/p/3097478.html
Copyright © 2011-2022 走看看