一、Code First

Code First方式只需要代码,不需要Edmx模型。EF通过实体类型结构推断生成SQL并创建数据库中的表。开发人员只需要编写实体类就可以进行EF数据库的开发。

Code First 有两种配置数据库映射的方式,一种是使用数据属性DataAnnotation,另外一种是使用Fluent API。

DataAnnotation的配置方式需要给实体类和类中的属性加上与数据库映射相关的配置标签。常见配置标签如下:

[Key]------主键,[Required]------非空,[MaxLenth],[MinLength],[StringLength]-----长度限制,[Table]-----表名,[Column]-----列名,[DatabaseGenerated]自增长,

[ForeignKey]----外键,[NotMapped]-----忽略映射

要使用Fluent API 就必须在自定义的继承自DbContext类中重载OnModelCreating方法。这个方法签名如下:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)

通过modelBuilder这个对象的Entity<>泛型方法类配置DbContext中的每个类的数据库映射

例如通过Fluent API配置数据库表的名字:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().ToTable("CustomerInfo");
}

二、创建Code First Demo

1.右键EFDemo解决方案,“添加-》新建项目-》控制台应用程序”,修改项目名称为CodeFirst

2.右键CodeFirst项目引用,选择“管理NuGet程序包”,搜索entity freamwork,安装entity freamwork包,如下图:

3.创建模型

添加一个Models文件夹,在Models下新建Order和OrderDetial模型

 public class Order
{
/// <summary>
/// Id 或者 类名+Id 的属性,默认会当成主键 ,不用添加[Key]特性
/// </summary>
[Key]
public long OrderId { get; set; } /// <summary>
/// 订单号
/// </summary>
[StringLength()]
public string OrderCode { get; set; } /// <summary>
/// 订单金额
/// </summary>
public decimal OrderAmount { get; set; } /// <summary>
/// 导航属性设置成virtual,可以实现延迟加载
/// </summary>
public virtual List<OrderDetail> OrderDetail { get; set; }
}
 public  class OrderDetail
{
[Key]
public long OrderDetailId { get; set; }
/// <summary>
/// 订单明细单价
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 订单明细数量
/// </summary>
public int Count { get; set; } /// <summary>
/// 外键,如果属性名称和Order主键名称一样,默认会当成外键,可以不加[ForeignKey]特性
/// 注意,ForeignKey里面的值要和导航属性的名称一致
/// </summary>
[ForeignKey("Order")]
public long OrderId { get; set; } /// <summary>
/// 导航属性
/// </summary>
public virtual Order Order { get; set; }
}

4.在配置文件中配置连接字符串

在App.config中添加如下配置节点,注意provideName必须填写,否则报错

<connectionStrings>
<add name="CodeFirstContext" connectionString="Data Source=SC-201703312219;Initial Catalog=EFDemoDB;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

5.创建上下文类CodeFirstContext

public class CodeFirstContext : DbContext
{
public CodeFirstContext() : base("name=CodeFirstContext")
{ } public virtual DbSet<Order> Orders { get; set; } public virtual DbSet<OrderDetail> OrderDetails { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//Database.SetInitializer<CodeFirstContext>(null);//不检查
// Database.SetInitializer<CodeFirstContext>(new DropCreateDatabaseIfModelChanges<CodeFirstContext>());//模型修改了 删除数据库
Database.SetInitializer<CodeFirstContext>(new DropCreateDatabaseAlways<CodeFirstContext>());//每次启动都删除数据库 }

6.调用插入数据

      static void Main(string[] args)
{
try
{
using (CodeFirstContext context = new CodeFirstContext())
{
Order order = new Order()
{
OrderCode="sdfdsgdfgrertef",
OrderAmount=74.23M,
};
context.Orders.Add(order);
context.SaveChanges();
}
Console.WriteLine("完成!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}

Entity Framework之Code First开发方式的更多相关文章

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

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

  2. Entity Framework 6 Code First新特性:支持存储过程

    Entity Framework 6提供支持存储过程的新特性,本文具体演示Entity Framework 6 Code First的存储过程操作. Code First的插入/修改/删除存储过程 默 ...

  3. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  4. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式

    AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...

  5. MVC2、MVC3、MVC4、MVC5之间的区别 以及Entity Framework 6 Code First using MVC 5官方介绍教程

    现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...

  6. Entity Framework 之 Code First

    使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First [前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费 ...

  7. 在Entity Framework 中用 Code First 创建新的数据库

    在Entity Framework 中用 Code First 创建新的数据库 (原文链接) 本文将逐步介绍怎样用Code First 创建新数据库,使用在代码中定义类和API中提供的特性(Attri ...

  8. Entity Framework Core Code First 项目实践

    Entity Framework Core Code First 实践 任何一种技术的出现都是为了解决一系列特定的问题,只有了解了技术所要解决的关键问题,才能理解它的真正用途,之后,才能在实践中用好它 ...

  9. Entity Framework 6 Code First的简单使用和更新数据库结构

    一.安装Entity Framework 6 在项目中右击选择“管理NuGet程序包",联机搜索Entity Framework,点击安装 二.配置数据库连接 在App.config中加入数 ...

随机推荐

  1. BZOJ 2287 【POJ Challenge】消失之物(DP+容斥)

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 986  Solved: 572[Submit][S ...

  2. 【Python】包管理工具pip

    一.pip的安装 1. 将"D:\Python27\"  和 "D:\Python27\Scripts"设置到环境变量当中 2. 安装setup tools 将 ...

  3. docker系列之一 image和container

    docker images往往不知不觉就占满了硬盘空间,为了清理冗余的image,可采用以下方法: 1.进入root权限 sudo su 2.停止所有的container,这样才能够删除其中的imag ...

  4. Axios 使用时遇到的问题

    最近使用 vue 构建一个小项目,在使用 axios 发送 post 请求的时候,发现 axios 发送数据默认使用 json 格式,百度搜了下,更改 ContentType 不管用,最终问题原来是: ...

  5. Github README.md中添加图片

    1.先把图片上传到你的项目中:然后在github网站上按路径打开图片,如下打开的图片链接: 2.复制图片的地址 3.然后在README.md写上: ![这里随便写文字](你刚复制的图片路径) 注意  ...

  6. 【BZOJ 1150】[CTSC2007]数据备份Backup

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 选择的连接肯定是相邻的点对. 那么我们处理出来长度为n-1的数组a 其中a[i-1] = dis[i]-dis[i-1] 那么问题就 ...

  7. C/C++中相对路径与绝对路径以及斜杠与反斜杠的区别

    1 绝对路径与相对路径 绝对路径表示相对容易得多,依次将文件所在盘符文件夹逐级展开就是绝对路径: ofstream infile("E:\\MyDoc\\file.txt", io ...

  8. 创建一个Spring的HelloWorld程序

    Spring IOC IOC指的是控制反转,把对象的创建.初始化.销毁等工作都交给Spring容器.由spring容器来控制对象的生命周期.下图能够说明我们传统创建类的方式和使用Spring之后的差别 ...

  9. js中Json字符串如何转成Json对象(4种转换方式)

    js中Json字符串如何转成Json对象(4种转换方式) 一.总结 一句话总结:原生方法(就是浏览器默认支持的方法) 浏览器支持的转换方式(Firefox,chrome,opera,safari,ie ...

  10. spring boot整合mail

    1.添加依赖 </dependency> <dependency> <groupId>org.springframework.boot</groupId> ...