Entity Framework(EF的Code First方法)
EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)一样,
一是为了使开发人员以操作对象的方式去操作关系型数据表。
二是为了屏蔽底层不同厂商的数据库,开发人员面向ORM框架编写数据的CRUD(Create,Retrieve,Update,Delete)操作,再由ORM框架将这些操作翻译成不同数据库厂商的语言。
从EF 4.X开始支持三种构建方法:1. Database First方法。2.Model First方法。3.Code First 方法。

本次测试以Visual Studio2013 / MS Sql Server2012 / Entity Framework 6.X 测试EF
Code First Demo【此时数据库和表格都已经存在,为了在原有项目中引入EF,需要使用这种方式】
【关键:上下文,实体类的约束及关系】
//MS SQL Server连接字符串
//connectionString="Data Source=(local);Initial Catalog=EFTest;User Id=sa;Password=123456;" providerName="System.Data.SqlClient"
<connectionStrings>
<add name="EFTest" connectionString="Data Source=(local);Initial Catalog=EFTest;User Id=sa;Password=123456;" providerName="System.Data.SqlClient"></add>
</connectionStrings>
原有项目中,已经有了模型类,所以不再重新生成模型类
操作步骤:
1>引入程序集EntityFramework.dll,System.Data.Entity.dll
2>在配置文件中 写连接字符串
3>创建模型类(如果项目中有模型类,则只需要维护关系)
通过导航属性来表示类的关系,注意:导航属性设置成virtual,
特性维护:Table,Key,ForeignKey
4>创建上下文类,继承自DbContext
调用父类构造方法,传递连接字符串"name=***"
5>根据类型创建数据库表
Context1 context = new Context1();
使用context.Database.CreateIfNotExists();完成数据库中表的创建;
调用context.SaveChanges()方法完成保存。
1:打开SQLServer2012,使用下面SQL文本创建MyFirstModelFirstEF数据库
create database EFTest
on primary
(
name='EFTest.mdf',
--修改为自己电脑上SQL DB路径
filename='D:\yangZ_MSSQL\EFTest.mdf',
size=5mb,
maxsize=100mb,
filegrowth=10%
)
log on
(
name='EFTest_log.ldf',
--修改为自己电脑上SQL DB路径
filename='D:\yangZ_MSSQL\EFTest_log.ldf',
size=2mb,
maxsize=100mb,
filegrowth=5mb
)
go
2:新建ConsoleApplication应用程序EFCodeFirstDemo

3:引入程序集EntityFramework.dll,System.Data.Entity.dll (默认找不到引用EntityFramework.dll)
3.1:可以通过NuGet来获取 [工具-->库程序包管理器-->程序包管理器控制台],Ps:这种方式要求电脑必须联网
Install-Package EntityFramework -Version 6.0.2
Install-Package EntityFramework -Pre (表示最新)
Uninstall-Package EntityFramework -Version 6.1.0
3.2:拷贝现有EF项目中的EntityFramework.dll文件
3.3:可以通过ModelFirst/DatabaseFirst(不添加任何表格)引入dll,然后删除Model.edmx文件
在EFCodeFirstDemo上 右键-->新建-->新建项-->数据-->ADO.NET实体数据模型,选择从数据库生成/空模型,然后点击完成

4:在配置文件中 写连接字符串
<connectionStrings>
<add name="EFTest" connectionString="Data Source=(local);Initial Catalog=EFTest;User Id=sa;Password=123456;" providerName="System.Data.SqlClient"></add>
</connectionStrings>
5:创建模型类(如果项目中有模型类,则只需要维护关系)
通过导航属性来表示类的关系,注意:导航属性设置成virtual,
特性维护:Table,Key,ForeignKey
ContactInfo.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFCodeFirstDemo
{
//Table是在 System.ComponentModel.DataAnnotations.Schema
[Table("ContactInfo")]
public class ContactInfo
{
//Key 是在System.ComponentModel.DataAnnotations
[Key]
public int InfoId { get; set; } public string InfoName { get; set; } //ForeignKey 是在System.ComponentModel.DataAnnotations.Schema
[ForeignKey("ContactType")]
public int ContactTypeId { get; set; } public virtual ContactType ContactType { get; set; }
}
}
ContactType.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFCodeFirstDemo
{
//Table是在 System.ComponentModel.DataAnnotations.Schema
[Table("ContactType")]
public class ContactType
{
public ContactType()
{
this.ContactInfo = new HashSet<ContactInfo>();
} //Key 是在System.ComponentModel.DataAnnotations
[Key]
public int TypeId { get; set; } public string TypeTitle { get; set; } public virtual ICollection<ContactInfo> ContactInfo { get; set; }
}
}
通过实体框架 Code First 建立新数据库 链接: http://pan.baidu.com/s/1qYBZiCc 密码: 5r4a
6:创建上下文类,继承自DbContext
调用父类构造方法,传递连接字符串"name=***"
6.1:在EFCodeFirstDemo project项目 右键-->添加-->类 Context1.cs
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFCodeFirstDemo
{
public class Context1 : DbContext
{
public Context1()
: base("name=EFTest")
{
} public virtual DbSet<ContactType> ContactType { get; set; } public virtual DbSet<ContactInfo> ContactInfo { get; set; }
}
}

7:根据类型创建数据库表
Context1 context = new Context1();
使用context.Database.CreateIfNotExists();完成数据库中表的创建;
调用context.SaveChanges()方法完成保存。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace EFCodeFirstDemo
{
class Program
{
static void Main(string[] args)
{
Context1 context = new Context1();
//在现有链接数据库中 ,若当前实体模型对应的数据库不存在,则创建,反之则不需要创建
context.Database.CreateIfNotExists();
context.SaveChanges();
}
}
}
此时对应MS SQL Server数据库为:

【未完,待续】
Entity Framework(EF的Code First方法)的更多相关文章
- Entity Framework(EF的Model First方法)
EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...
- Entity Framework(EF的Database First方法)
EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...
- 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】
[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...
- ASP.NET Core 开发-Entity Framework (EF) Core 1.0 Database First
ASP.NET Core 开发-Entity Framework Core 1.0 Database First,ASP.NET Core 1.0 EF Core操作数据库. Entity Frame ...
- Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询
Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询 SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...
- [转]Using Entity Framework (EF) Code-First Migrations in nopCommerce for Fast Customizations
本文转自:https://www.pronopcommerce.com/using-entity-framework-ef-code-first-migrations-in-nopcommerce-f ...
- Entity Framework工具POCO Code First Generator的使用
在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...
- Entity Framework工具POCO Code First Generator的使用(参考链接:https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator)
在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...
- ASP.NET Core 开发 - Entity Framework (EF) Core
EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 开发 - En ...
随机推荐
- mysql-master-ha 实现mysql master的高可用。
常用的mysql 高可用有下面几种方案: 名称 原理 特点 mysqlmha Perl脚本对mysql master做心跳,master down了以后,选举new master ,是要改代理层的 ...
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
- 父类是在子类创建对象时候 在子类中创建一个super内存空间
父类是在子类创建对象时候 在子类中创建一个super内存空间
- BZOJ3157/BZOJ3516 国王奇遇记(矩阵快速幂/数学)
由二项式定理,(m+1)k=ΣC(k,i)*mi.由此可以构造矩阵转移,将mi*ik全部塞进去即可,系数即为组合数*m.复杂度O(m3logn),因为大常数喜闻乐见的T掉了. #include< ...
- 【刷题】UOJ #274 【清华集训2016】温暖会指引我们前行
寒冬又一次肆虐了北国大地 无情的北风穿透了人们御寒的衣物 可怜虫们在冬夜中发出无助的哀嚎 "冻死宝宝了!" 这时 远处的天边出现了一位火焰之神 "我将赐予你们温暖和希望! ...
- Java并发编程中线程池源码分析及使用
当Java处理高并发的时候,线程数量特别的多的时候,而且每个线程都是执行很短的时间就结束了,频繁创建线程和销毁线程需要占用很多系统的资源和时间,会降低系统的工作效率. 参考http://www.cnb ...
- 51nod 1589 移数博弈 | 基数排序(ノಠ益ಠ)ノ彡┻━┻
51nod 1589 移数博弈 题面 给出一个序列a,长度 n <= 10^7, a[i] <= 10^7 求每个长度 >= 2 的区间的最大值*次大值 之和. 题解 主要思路是求每 ...
- Mac显示同一程序的所有窗口
通过F3键可以显示所有程序的所有窗口到桌面,但是如果窗口太多的话显示出来很难看清. 如果只显示某一个程序的所有窗口就不会乱了. 其实在dock上有一个相应的选项,但是没有快捷键. 开启方法: 在终端上 ...
- 解题:CF570D Tree Requests
题面 DSU on tree确实很厉害,然后这变成了一道裸题(逃 还是稍微说一下流程吧,虽然我那个模板汇总里写过 DSU on tree可以以$O(n\log n)$的复杂度解决树上子树统计问题,它这 ...
- fzyzojP2984 -- 序列变换问题
一个区间缩小变换的问题,并且n<=300 启示我们区间dp 我们考虑最后一定是在原串上扣一些,剩一些 所以不妨前求出[l,r]把[l,r]完全处理成什么样子的方案数 然后再来一遍序列dp,统计答 ...