搜索

查看: 3089|回复: 11

[ASP.NET] 使用EF Code First搭建简易ASP.NET MVC网站并允许数据库迁移

[复制链接]
发表于 2023-5-4 11:34:19 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:34:19 3089 11 看全部
本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移。
创建一个ASP.NET MVC 4 网站。
在Models文件夹内创建Person类。
    public class Person
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
在Controls文件夹内创建PersonController,选择使用Entity Framework的模版、模型类,创建数据上下文类,如下:

2022911143542201.png

2022911143542201.png


点击"添加"后,除了在Controls文件夹内多了PersonController,在Models文件夹中多了PersonContext类,如下:
using System.Data.Entity;
namespace MvcApplication1.Models
{
    public class PersonContext : DbContext
    {
        // 您可以向此文件中添加自定义代码。更改不会被覆盖。
        //
        // 如果您希望只要更改模型架构,Entity Framework
        // 就会自动删除并重新生成数据库,则将以下
        // 代码添加到 Global.asax 文件中的 Application_Start 方法。
        // 注意: 这将在每次更改模型时销毁并重新创建数据库。
        //
        // System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges());
        public PersonContext() : base("name=PersonContext")
        {
        }
        public DbSet People { get; set; }
    }
}
在Web.config中的connectionStrings多了如下配置,选择了默认的localdb数据库。
  
    ......
   
  
在Views/文件夹中多了Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, Index.cshtml这个几个视图文件。
现在,我们想启动EF的自动迁移功能。点击"工具"-"库程序包管理器"-"程序包管理器控制台",输入enable-migrations:

2022911143542202.png

2022911143542202.png


在根目录下多了一个Migrations文件夹,以及生成了一个Configuration类,如下:
namespace MvcApplication1.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    internal sealed class Configuration : DbMigrationsConfiguration
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }
        protected override void Seed(MvcApplication1.Models.PersonContext context)
        {
            //  This method will be called after migrating to the latest version.
            //  You can use the DbSet.AddOrUpdate() helper extension method
            //  to avoid creating duplicate seed data. E.g.
            //
            //    context.People.AddOrUpdate(
            //      p => p.FullName,
            //      new Person { FullName = "Andrew Peters" },
            //      new Person { FullName = "Brice Lambson" },
            //      new Person { FullName = "Rowan Miller" }
            //    );
            //
        }
    }
}
以上,我们可以添加一些种子数据。
现在需要把种子数据迁移到数据库,在"程序包管理器控制台",输入add-migration initial:

2022911143542203.png

2022911143542203.png


此时,在Migrations文件夹内多了201502100756322_initial类,记录了本次迁移的动作。
namespace MvcApplication1.Migrations
{
    using System;
    using System.Data.Entity.Migrations;
   
    public partial class initial : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.People",
                c => new
                    {
                        ID = c.Int(nullable: false, identity: true),
                        FirstName = c.String(),
                        LastName = c.String(),
                    })
                .PrimaryKey(t => t.ID);
            
        }
        
        public override void Down()
        {
            DropTable("dbo.People");
        }
    }
}
最后别忘了要更新数据库,在"程序包管理器控制台",输入update-database:

2022911143542204.png

2022911143542204.png


这时候,浏览/Person/Index,能实现所有的增删改功能。
如果这时候,我们希望在Person中增加一个属性,比如类型为int的Age属性。
    public class Person
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
    }
我们如何告诉数据库呢?
还是在"程序包管理器控制台",输入add-migration 名称:

2022911143542205.png

2022911143542205.png


此时,在Migrations文件夹内多了201502100812315_addedage类,记录了本次迁移的动作。
最后,还在"程序包管理器控制台",输入update-database以更新数据库。

2022911143542206.png

2022911143542206.png


为了让视图与当前Person类同步,可以先后删除Person文件夹和PersonController控制器,再重新创建PersonController控制器,选择使用Entity Framework的模版、Person类,PersonContext上下文类。
至此,简单体验了EF Code First创建数据库并实现数据库迁移的方便之处。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对知鸟论坛的支持。如果你想了解更多相关内容请查看下面相关链接
回复

使用道具 举报

发表于 2023-6-28 17:06:47 | 显示全部楼层
普通人物怨 2023-6-28 17:06:47 看全部
楼主,大恩不言谢了!知鸟论坛是最棒的!
回复

使用道具 举报

发表于 2023-6-29 08:04:23 | 显示全部楼层
贰十岁装成熟装s 2023-6-29 08:04:23 看全部
感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
回复

使用道具 举报

发表于 2023-6-29 14:09:11 | 显示全部楼层
当当当当裤裆坦 2023-6-29 14:09:11 看全部
楼主,大恩不言谢了!知鸟论坛是最棒的!
回复

使用道具 举报

发表于 2023-6-29 16:22:36 | 显示全部楼层
向往草原403 2023-6-29 16:22:36 看全部
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
回复

使用道具 举报

发表于 2023-6-30 00:30:04 | 显示全部楼层
123456809 2023-6-30 00:30:04 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
回复

使用道具 举报

发表于 2023-6-30 00:58:37 | 显示全部楼层
123456819 2023-6-30 00:58:37 看全部
楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
回复

使用道具 举报

发表于 2023-6-30 02:13:03 | 显示全部楼层
123456848 2023-6-30 02:13:03 看全部
楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
回复

使用道具 举报

发表于 2023-6-30 19:53:14 | 显示全部楼层
风来时狂放 2023-6-30 19:53:14 看全部
既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
回复

使用道具 举报

发表于 2023-6-30 21:06:13 | 显示全部楼层
冀苍鸾 2023-6-30 21:06:13 看全部
其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
回复

使用道具 举报

  • 您可能感兴趣
点击右侧快捷回复 【请勿灌水】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

RSS订阅| SiteMap| 小黑屋| 知鸟论坛
联系邮箱E-mail:zniao@foxmail.com
快速回复 返回顶部 返回列表