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

(一)准备工作

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

Console:这个就不说了;

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

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

如下图所示:

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

代码如下:

namespace Model
{ [Table("Sys_User")] //自动建表的表名
public class User
{
/// <summary>
/// 主键
/// </summary>
[Key]
public Guid Id { get; set;}
/// <summary>
/// 登录名
/// </summary>
[Required] //必填项(非空)
[MaxLength()] //最大长度(50)
public string LoginName { get; set;} /// <summary>
/// 密码
/// </summary>
[Required]
[MaxLength()]
public string Password { get; set; } /// <summary>
/// 性别
/// </summary>
[Required]
public bool Gender { set; get; } /// <summary>
/// 是否启用
/// </summary>
[Required]
public bool IsEnable { get; set; } /// <summary>
/// 真实姓名
/// </summary>
[MaxLength()]
public string RealName { get; set; } [MaxLength()]
public string Remark { get; set; } /// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; } }
}

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

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

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

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中,然后,在代码中如下位置添加连接字符串:

需要注意的是:

<connectionStrings> 加到<configSections></configSections>的后面,不要加到前面去了,否则可能会出问题哦!

代码如下:

  <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事件,添加如下代码:

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

如下图所示:

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

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

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

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

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

下面看一下我的数据库

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

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

然后再次运行程序:

结果是这样的:

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

 // 自动迁移时如果引起数据丢失是否可接受
AutomaticMigrationDataLossAllowed = true;

看图:

然后我再运行一下代码:

再查看数据库:

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

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

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

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

结果为:

看看数据库:

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

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

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

Asp.net MVC 中 CodeFirst 开发模式实例的更多相关文章

  1. C# 动态生成word文档 [C#学习笔记3]关于Main(string[ ] args)中args命令行参数 实现DataTables搜索框查询结果高亮显示 二维码神器QRCoder Asp.net MVC 中 CodeFirst 开发模式实例

    C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正. 在工程中引用word的动态库 在项目中,点击项目名称右键-- ...

  2. ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

    ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  ...

  3. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  4. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  5. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  6. 如何在 ASP.NET MVC 中集成 AngularJS(1)

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

  7. 在Asp.net MVC中应该怎样使用Spring.Net

    简单工厂 专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类或接口.简单工厂模式又称为静态工厂方法(Static Factory Method)模式,属于类的创建型模式,通常根据一 ...

  8. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  9. 4.在MVC中使用仓储模式进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 系列目录: ...

随机推荐

  1. Ubuntu配置tomcat9

    buntu 安装jdk:[链接] Ubuntu安装eclipse:[链接] Ubuntu下安装MySQL与mysql workbench:[链接] Ubuntu配置tomcat9:[链接] Ubunt ...

  2. java基础系列之ConcurrentHashMap源码分析(基于jdk1.8)

    1.前提 在阅读这篇博客之前,希望你对HashMap已经是有所理解的,否则可以参考这篇博客: jdk1.8源码分析-hashMap:另外你对java的cas操作也是有一定了解的,因为在这个类中大量使用 ...

  3. 单例模式--java代码实现

    单例模式 单例模式,顾名思义,在程序运行中,实例化某个类时只实例化一次,即只有一个实例对象存在.例如在古代,一个国家只能有一个皇帝,在现代则是主席或总统等. 在Java语言中单例模式有以下实现方式 1 ...

  4. RabbitMQ和Kafka到底怎么选?

    前言 开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措.对于RabbitMQ和Kafka,到底应该选哪个? Rabbi ...

  5. Netbeans IDE 安装Emmet插件并解决Emmet插件无效果问题

    Emmet是许多流行文本编辑器的插件,它极大地改进了HTML和CSS工作流程:在Netbeans IDE 下安装Emmet:1.打开Netbeans IDE编辑器,选择 工具—>插件选项,在 可 ...

  6. Actor模型-Akka

    英文原文链接,译文链接,原文作者:Arun Manivannan ,译者:有孚 写过多线程的人都不会否认,多线程应用的维护是件多么困难和痛苦的事.我说的是维护,这是因为开始的时候还很简单,一旦你看到性 ...

  7. SpaceSyntax【空间句法】之DepthMapX学习:第二篇 输出了什么东西 与 核心概念

    这节比较枯燥,都是原理,不过也有干货.这篇能不能听懂,就决定是否入门...所以,加油吧 博客园/B站/知乎/CSDN  @秋意正寒 转载请在文头注明本文地址 本篇讲空间句法的几个核心概念,有一些也是重 ...

  8. php架构之路

    鉴于最近跟小伙伴聊了很多PHP架构发展方向的问题,相关技术整理了一下,也顺便规划了一下自己的2019年. 一.常用的设计模式以及使用场景 以下是我用到过的   工厂,单例,策略,注册,适配,观察者,原 ...

  9. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  10. WinForm加载外部类库项目的集成开发模式

    在项目开发中有一定的团队用到了Nuget.Coding:但是这用起来还是不太方方便,在Winform中呢,我们可以把一个人的项目当作一个类库项目,因为它生成的是一个dll文件,也就是单一文件,拥有了它 ...