• ASP.NET MVC——CodeFirst开发模式


       Entity Framework框架提供了几种开发模式,比如Database First,Model First,Code First。Database First是最老也是应用得最广泛的一种设计方式。Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来创建模型。如果后期需求有所变更或者功能有很大变化的话,需要涉及到更改数据库所付出的代价将会很大,因为之前编写好的代码将不再适用于新的表,我们必需重构以更改代码中的逻辑以适应更改之后的表。Model First是创建ADO.NET实体对象以及它们之间的关系,然后再指定到数据库的映射。这个实体对象即为Model。

           我们今天要讲的是Code First(代码先行)。它思想就是先定义模型中的类,再通过这些类生成数据库。这种开发模式适合于全新的项目,它使得我们可以以代码为核心进行设计而不是先构造数据库,步骤如下。

           1.接下来我就以一个简单的例子来介绍这种开发模式。我们的需求是两个表,博客表和评论表。一个博客对应多个评论,一个评论对应一个博客。这是一对多关系。我们先新建一个ASP.NET MVC项目,并用NuGet安装EntityFramework。然后建立两个Model。

    public class Blog
    
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public DateTime Time { get; set; }
        public string Summary { get; set; }
        public string Content { get; set; }
     
        public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>();
    }
    public class Comment
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public Guid Id { get; set; }
            public string VisitorName { get; set; }
            public string Email { get; set; }
            public DateTime Time { get; set; }
            public string Content { get; set; }
    
            [ForeignKey("Blog")]
            public Guid BlogId { get; set; }
            public virtual Blog Blog { get; set; }
        }

     2.接下来我们创建数据上下文。新建一个文件夹叫Context,并在其中新建类,代码如下:

     public class TestDbContext: DbContext
     {
            public TestDbContext()
              : base("name=ConString")
            {
    
            }
            #region 数据库相关表 新增表需要在此添加对应关系 
    
            public virtual DbSet<Blog> Blog{ get; set; }
            public virtual DbSet<Comment>Comment{ get; set; } 
            #endregion
     }

    3.接着我们在Web.config中来配置数据库,在Web.config中的<configuration>节点中加入如下配置(注意:section节点和connectionStrings的位置)

      <configSections>
        <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
        <section name="entityFramework"
          type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
          requirePermission="false"/>
      </configSections>
      <connectionStrings>
        <add  name="ConString"  connectionString="Server=.;DataBase=test;Uid=sa;Pwd=123456" providerName="System.Data.SqlClient" />
      </connectionStrings>

    4.添加完成之后,进行数据迁移

    打开Package Manager Console(程序包管理控制台)

    输入命令 1、 enable-migrations 回车。2、add-migration  回车,输入方便认识的名字 。3、下面我们就执行正式迁移,输入 update-database 回车,搞定。

  • 相关阅读:
    软件开发各列阶段需要达到的目标和生成的成果
    SQL Server 2005 Express附加数据库为“只读”的解决方法
    System.Web.HttpException: Request timed out.
    [收藏]javascript keycode大全
    MS SQL Server中的CONVERT日期格式化大全
    转贴 对于大型公司项目平台选择j2ee的几层认识(一)
    项目经理:做好项目开始阶段的九条经验(1) 项目 技术应用
    .Net Core 实现账户充值,还款,用户登录(WebApi的安全)
    JS如何通过月份,计算月份相差几个月
    .Net core Api后台获取数据,异步方法中,数据需采用Linq分页
  • 原文地址:https://www.cnblogs.com/pengchong/p/12349563.html
Copyright © 2020-2023  润新知