Entity Framework之Code First开发方式
一、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开发方式的更多相关文章
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- Entity Framework 6 Code First新特性:支持存储过程
Entity Framework 6提供支持存储过程的新特性,本文具体演示Entity Framework 6 Code First的存储过程操作. Code First的插入/修改/删除存储过程 默 ...
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...
- AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 从Subsonic到Entity Framework Subsonic最早发布 ...
- MVC2、MVC3、MVC4、MVC5之间的区别 以及Entity Framework 6 Code First using MVC 5官方介绍教程
现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...
- Entity Framework 之 Code First
使用NuGet助您玩转代码生成数据————Entity Framework 之 Code First [前言] 如果是Code First老鸟或者对Entity Framework不感兴趣,就不用浪费 ...
- 在Entity Framework 中用 Code First 创建新的数据库
在Entity Framework 中用 Code First 创建新的数据库 (原文链接) 本文将逐步介绍怎样用Code First 创建新数据库,使用在代码中定义类和API中提供的特性(Attri ...
- Entity Framework Core Code First 项目实践
Entity Framework Core Code First 实践 任何一种技术的出现都是为了解决一系列特定的问题,只有了解了技术所要解决的关键问题,才能理解它的真正用途,之后,才能在实践中用好它 ...
- Entity Framework 6 Code First的简单使用和更新数据库结构
一.安装Entity Framework 6 在项目中右击选择“管理NuGet程序包",联机搜索Entity Framework,点击安装 二.配置数据库连接 在App.config中加入数 ...
随机推荐
- HDU-2087 剪花布条 字符串问题 KMP算法 查匹配子串
题目链接:https://cn.vjudge.net/problem/HDU-2087 题意 中文题咯 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条, ...
- HDU 2196 Computer(经典树形DP)
题意自己看(猜) 题解 这题很经典,就是记录dp[i][0/1/2]分别代表,从i点向下最大和次大深度,和向上最大深度. 然后转移就行了. 我的写法可能太丑了.死活调不出来,写了一个漂亮的 #incl ...
- Linux bash常用快捷键
移动光标 ctrl-a 光标移动到行首 ctrl-e 光标移动到行尾 ctrl+xx 在行首和光标位置直接切换 ctrl-b 光标左移一位 ctrl-f 光标右移一位 alt-b 光标左移一词 alt ...
- /etc/rsyncd.conf
[root@backup ~]# cat /etc/rsyncd.conf #Rsync server#created by oldboy ##rsyncd.conf start##uid = rsy ...
- 一片非常有趣的文章 三分钟读懂TT猫分布式、微服务和集群之路
原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分钟读懂TT猫分布式.微服务和集群之路 针对新手入门的普及,有过大型网站技 ...
- thinkphp 5.0整合phpsocketio完整攻略,绕坑
使用环境: thinkphp5.0 项目需求 前端下单,后台接受,并立即做出提示.例如:美团外卖,客户端下单成功后,商家端就会立即有接单语音提示. 开发环境 thinkphp5.0 phpsocket ...
- 实验二实验结论&实验总结与体会
Part1:格式化输出函数printf()和格式化输入函数scanf() ① /* <C语言程序设计教程学习指导>p118 实验内容(1) 这是一个常用格式控制符使用示例 运行程序,结合运 ...
- Google的10大座右铭
1. 以用户为中心,其他一切纷至沓来. 创建伊始,Google 即以提供最佳的用户体验为其中心任务.虽然很多公司主张客户利益优先,但难以抗拒各种诱惑,往往会牺牲客户的少量利益来增加股东价值. Goog ...
- 009实现一个算法来删除单链表中的一个结点,仅仅给出指向那个结点的指针(keep it up)
呵呵,这个题不能直接删除已知的结点.由于是单链表,不知道前驱,仅仅知道 后继结点,直接删除会使链表断开.只是我们能够删除已知结点的后继结点, 把后继结点的值赋值给已知结点. #include < ...
- Mono源码学习笔记:Console类(四)
NullStream 类 (internal class) 以下就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...