本文程序基于VS2015、EF6.1,本文不做过多深入讨论,只是个入门。

EF 就是微软的 EntityFramework,主要分为 DB First,Model First,Code First。之前也只是简单的用 DB First,后来发现 Code First 才是大势所趋,毕竟对于 Coder 来说代码实现更好点,而且迁移很好用。

首先是程序结构

一、Models

先弄2个Model,对应于2张表的结构

 public class UserModel
     {
         public int Id { get; set; }
         public string Name { get; set; }
         public int Age { get; set; }
         public virtual ICollection<ProductModel> Products { get; set; }
     }
 public class ProductModel
     {
         public int Id { get; set; }
         public string Name { get; set; }
     }

二、Mapping

这里主要是设置每个字段的一些限制,比如是否可为空,外键关系啊等等,有些人喜欢写在 Context 的 OnModelCreating 里,但是我还是喜欢单独写成 Mapping 里,这样更清晰一些

 public class UserModelMap : EntityTypeConfiguration<UserModel>
     {
         public UserModelMap()
         {
             //this.ToTable("dbo.User");
             this.HasKey(u => u.Id);

             this.Property(u => u.Name).IsRequired();
             this.HasMany(u => u.Products);
         }
     }
 public class ProductModelMap : EntityTypeConfiguration<ProductModel>
     {
         public ProductModelMap()
         {
             this.HasKey(p => p.Id);

             this.Property(p => p.Name).IsRequired();
         }
     }

三、Context

先在 App.config 里添加一个连接字符串,请注意正常的 SqlServer 和 LocalDB 连接字符串不一样

<connectionStrings>

<add name="EFCodeFirst"connectionString="Server=.;Database=EFCodeFirst;Integrated Security=SSPI"providerName="System.Data.SqlClient"/>

</connectionStrings>

创建一个 Context

 public class EFContext : DbContext
     {
         public DbSet<UserModel> Users { get; set; }

         public DbSet<ProductModel> Products { get; set; }

         public EFContext()
             : base("name=EFCodeFirst")
         {

         }

         protected override void OnModelCreating(DbModelBuilder modelBuilder)
         {
             base.OnModelCreating(modelBuilder);
             //modelBuilder.Entity<UserModel>()

             modelBuilder.Configurations.Add(new UserModelMap());
             modelBuilder.Configurations.Add(new ProductModelMap());
         }
     }

四、创建

运行后就可以创建一个数据库了

五、迁移

开发过程中总是会改数据库的,所以就需要用到迁移

在 Package Manager Console 中执行 Enable-Migrations,然后目录中就会出现 Migrations 文件夹了

每次执行迁移时都会生成一个文件,可以用来恢复,这样也有个记录,我觉得这点还是很强大的

六、常用的命令

从网上找到的,不全

安装EF

PM> Install-Package EntityFramework  Or  NuGet

启用Migrations

PM> Enable-Migrations -EnableAutomaticMigrations

添加Migration

PM> Add-Migration InitialCreate(名字)

更新

PM> Update-Database -Verbose

获取指定版本

PM> Update-Database –TargetMigration:"201606220937315_InitialCreate.cs"(名字)

EF-Code First 入门的更多相关文章

  1. EF和MVC系列文章导航:EF Code First、DbContext、MVC

    对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念泉涌而出,的确犹如当头一棒不知所措.本系列文章可以帮助新手入门并熟练使用EF和MVC,有了 ...

  2. 用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署

    用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的Code First迁移和部署 这是微软官方SignalR 2.0教程Getting Started with En ...

  3. EF Code First、DbContext

    EF Code First.DbContext 对于之前一直使用webForm服务器控件.手写ado.net操作数据库的同学,突然来了EF和MVC,好多新概念一下泉涌而出,犹如当头一棒,的确有点不知所 ...

  4. [转] 使用 MVC 5 的 EF6 Code First 入门 系列

    译文:http://www.cnblogs.com/Bce-/category/573301.html 原文:http://www.asp.net/mvc/overview/getting-start ...

  5. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  6. EF Code First学习系列

    EF Model First在实际工作中基本用不到,前段时间学了一下,大概的了解一下.现在开始学习Code First这种方式.这也是在实际工作中用到最多的方式. 下面先给出一些目录: 1.什么是Co ...

  7. EF Code First 初体验

    Code First 顾名思义就是先代码,再由代码生成数据库的开发方式. 废话不多说,直接来一发看看:在VS2010里新建一个空白解决方案,再依次添加两个类库项目:Model.DataAccess和一 ...

  8. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

  9. EF Code First 主键对应多个外键

    这是一位朋友提出的疑问,EF 映射主键可以对应多个外键吗?如果外键设置级联删除会发生什么情况?下面做一个测试,示例实体代码: public class Blog { public Blog() { P ...

  10. 【记录】EF Code First 实体关联,如何添加、修改实体?

    在使用 EF Code First 的时候,我们经常会对项目中的 Entry 进行一对多.多对多的映射配置,这时候就会产生主实体和子实体的概念,我们在添加.修改他们的时候,有时候会产生一些问题,比如添 ...

随机推荐

  1. frame,bounds,center分析

    采用CGPoint来表示坐标系X,Y位置,创建一个坐标的方式为:CGPoint point=CGPointMake(x,y) CGSize用来表示视图的宽度和高度,可以用CGSizeMake(widt ...

  2. git 删除已经 add 的文件

    使用 git rm 命令即可,有两种选择, 一种是 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除: 一种是 git rm --f " ...

  3. 使用SFTP上传文件到服务器的简单使用

    最近用到SFTP上传文件查找了一些资料后自己做了一点总结,方便以后的查询 /** * 将文件上传到服务器 * * @param filePath * 文件路径 * @param channelSftp ...

  4. HTML <input> 标签的 maxlength 属性

    前端的表单,需要进行验证. 结合JS表单验证框架,写了很多前端验证的代码. 其中,有这么一个需求:用户最多只能输入10个字符. 按照惯性,肯定是会去写JS表单验证了. 实际上,根本没有必要. HTML ...

  5. Strom实现数字累加Demo

    import java.util.Map; import backtype.storm.Config; import backtype.storm.LocalCluster; import backt ...

  6. poj 1947 树形dp

    思路:dp[i][j]表示,以i节点为根,删去j个节点最少要断几条边. 那么dp[u][j]=min(dp[u][j],dp[v][k]+dp[u][j-k]);//选取最优状态 dp[u][j]=m ...

  7. 【转】IT管理人才必备的十大能力

    作为IT技术人员,相信没有一个人愿意永远在底层编写程序或做简单的系统维护.经过一段时间的技术和经验的积累,很多人都向往更高层的职位,但如何能成为一个专业的IT管理人才,并不是每一个人都清晰.明了. & ...

  8. latex之设置字体大小

    \tiny\scriptsize\footnotesize\small\normalsize\large\Large\LARGE\huge\Huge

  9. js使用CSS将图片转换成黑白(灰色、置灰)

    详细内容请点击 可能早就知道,像汶川这种糟糕的日子网站全灰在IE下是可以轻松实现的(filter: gray;),不过,当时,其他浏览器是无解的. 不过,时代发展,如今,CSS3的逐步推进,我们也开始 ...

  10. 绝对好评的淘宝购物导航:baiso.uz.taobao.com

    绝对好评的淘宝购物导航:baiso.uz.taobao.com 绝对好评的淘宝购物导航--百搜:http://baiso.uz.taobao.com