本文程序基于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. Android小项目之二 代码的组织结构

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...

  2. java 动态代理范例 InvocationHandler与Proxy

    java 动态代理范例 InvocationHandler与Proxy,拦截与代理 java.lang.reflect.Proxy,Proxy 提供用于创建动态代理类和实例的静态方法.newProxy ...

  3. web前端开发(5)

    CSS的一些问题: 一般情况下,尽量使用class选择器 解决点击超链接后hover 样式不出现多次问题:a:visited  a:hover 的顺序是问题所在,记住 love hate  L(lin ...

  4. netbeans 调试 php

    修改php.ini文件 原来配置 [XDebug];zend_extension = "E:\xampp\php\ext\php_xdebug.dll";xdebug.profil ...

  5. 【Linux】Shell脚本编程(二)

    练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 for i in $(seq 0 2 ...

  6. 1369 xth 砍树

    1369 xth 砍树  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 在一个凉爽的夏夜,xth 和 ...

  7. 304 CORS

    304响应, CORS问题: 没有 Access-Control-Allow-Origin 这个头信息时,以前次返回的200请求为准. 示例:可能已被删除 http://7af3zm.com1.z0. ...

  8. 【BUG】---ng-show/ng-hide修改成功但没有效果

    问题:点击搜索,隐藏tab,出现搜索结果列表,调试也成功修改了分别元素的ng-hide就是没有效果 我的错误: <div ng-hide="{{isShow}}" class ...

  9. DWZ (JUI) 教程 DWZ中dialog层的刷新

    在DWZ开发过程中经常会遇到的一种情况就是:在navTab页面中通过a标签打开一个dialog,在dialog层进行操作后,需要对该dialog层进行必要的刷新操作. 1.首先讲一下思路: 在非dia ...

  10. dataset 和DataTable的用法

    以下包含了这两种不同属性的用法: foreach (DataRow dr in dataset.Tables[0].Rows)            { if (i != 0 && l ...