Asp.net MVC 中 CodeFirst 开发模式实例

2019-07-30 15:29:28 浏览数 (1)

  昨天写的这篇博客因为下班时间到了忘记保存了,好郁闷,得重新写一遍。实习所在公司使用的是CodeFirst开发模式,最近开始参与到公司的项目里面来了,发现这个模式特别好用,建库建表改变字段属性添加删除字段等等操作都无需自己在数据库动手操作,只需要编写代码即可实现,着实是方便了许多。今天来记录一下如何使用CodeFirst开发模式,闲言少叙,下面进入正题。

(一)准备工作

  新建三个项目,其中一个为MVC项目(Console),另外两个为类库项目(Moel和ORM),三者用途如下:

Console:这个就不说了;

Model:这个项目里专门书写数据实体类;

ORM:这个项目用来创建上下文,构建数据库与实体类之间的映射关系;

如下图所示:

(二)在Model中添加实体类User.cs

代码如下:

代码语言:javascript复制
namespace Model
{

    [Table("Sys_User")] //自动建表的表名
    public class User
    {
        /// <summary>
        /// 主键
        /// </summary>
        [Key]
        public Guid Id { get; set;}
        /// <summary>
        /// 登录名
        /// </summary>
        [Required] //必填项(非空)
        [MaxLength(50)] //最大长度(50)
        public string LoginName { get; set;}

        /// <summary>
        /// 密码
        /// </summary>
        [Required]
        [MaxLength(50)]
        public string Password { get; set; }

        /// <summary>
        /// 性别
        /// </summary>
        [Required]
        public bool Gender { set; get; }

        /// <summary>
        /// 是否启用
        /// </summary>
        [Required]
        public bool IsEnable { get; set; }

        /// <summary>
        /// 真实姓名
        /// </summary>
        [MaxLength(50)]
        public string RealName { get; set; }

        [MaxLength(300)]
        public string Remark { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

    }
}

(三)在ORM中书写上下文,建立映射关系

1.在ORM中利用Nuget工具添加EF包:

2.新建类文件,添加如下代码:

代码语言:javascript复制
namespace ORM
{
    public class MyDbContext : DbContext
    {
        public MyDbContext()
           : base(GetConnectionString()) { }

        private static string GetConnectionString()
        {
            return "SqlServerConnectionString";
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

        public DbSet<User> Users { get; set; }//建立实体类与表的映射关系
    }
}

上面的构造函数public MyDbContext():base("XXX"){},这个xxx位置填写的是你在配置文件里配置数据库链接的链接名,上面代码我写的是 SqlServerConnectionString。

(四)在配置文件中配置数据库连接字符串 SqlServerConnectionString

  首先,同样要用nuget工具将EF添加到 Console中,然后,在代码中如下位置添加连接字符串:

需要注意的是:

代码语言:javascript复制
<connectionStrings> 加到<configSections></configSections>的后面,不要加到前面去了,否则可能会出问题哦!

代码如下:

代码语言:javascript复制
  <connectionStrings>
    <add name="SqlServerConnectString" providerName="System.Data.SqlClient" connectionString="Server=localhost;Database=CodeFirstDb;Integrated Security=False;User ID=sa;Password=168168;" /
  </connectionStrings>

连接字符串里的内容就不多说了,这里的数据库也会自动生成,不用自己手动去建库。

配置完ConnectionString后,记得要把System.Configuration这个引用添加到ORM项目中。

(五)数据迁移Migration (将Model的修改应用到数据库中,且不会改变对应的表中的原始数据)

在ORM项目中,打开nuget管理工具的控制台模式

然后输入指令:Enable-Migrations(注意:migrations,后面有个s,不要写掉了):

完成此步后,我们可以看到,ORM中多了一个文件夹,里面有如下的内容:

下面对Configuration.cs里的内容进行更改:

改动点见上图。

(六)在Application_Start事件中初始化数据库策略

  打开Console中的global.aspx文件,找到Application_Start事件,添加如下代码:

代码语言:javascript复制
 //当提供了初始化数据时,使用该形式,以初始化数据库策略并填充一些数据(当某个Model改变了,就删除原来的数据库创建新的数据库)
 Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext,ORM.Migrations.Configuration>()); 

如下图所示:

(七)在Console新建控制器,实现一个对User表的简单应用

前面6步做好了,就基本大功告成了,下面验证一下,有没有自动生成数据库。

在控制器中添加控制器,直接选自动生成增删改查功能的模板,如下所示:

这样就自动生成了一些关于User的功能,我们打开这一页面,可以看到:

这里的一组数据是我加上去的,如果是首次运行,这里没有数据,只会显示这一排字段。

下面看一下我的数据库

这个数据库已经生成了,要知道我之前是并没有建这个库和表的。

下面,我将User.cs中的Remark实体删除,看看数据库中有何变化:

然后再次运行程序:

结果是这样的:

哦。。。。哦。。尴尬了啊,他禁止了我的数据迁移,说因为这会造成数据丢失,怎么办呢。好办,只需要在ORM下的Configuration.cs中添加如下代码即可解决:

代码语言:javascript复制
 // 自动迁移时如果引起数据丢失是否可接受
  AutomaticMigrationDataLossAllowed = true;

看图:

然后我再运行一下代码:

再查看数据库:

看数据库,我们的Remark字段已经不见了。

因为缺少这个字段,所以在进行增删改查功能是会出错:

这是由于我们原来生成的View中有这个字段,现在实体类里这个字段删除了,而view页面中没删除造成的,只需要自己去把与Remark相关的字段删除就可以正常运行的。

下面,我再把这个Remark字段加上去,看看结果。

结果为:

看看数据库:

关于其他的新建表,添加字段等等功能,都是适用的,这里我就再一 一演示了。

好了,这篇就写到这里了哦,希望能帮到你!加油!

大佬看到了 ,也希望指点一下,感激不尽!

0 人点赞