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方法)的更多相关文章

  1. Entity Framework(EF的Model First方法)

    EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...

  2. Entity Framework(EF的Database First方法)

    EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架.同其它ORM(如,NHibernate,Hibernate)一样, 一是为了使开 ...

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

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

  4. 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 ...

  5. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  6. [转]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 ...

  7. Entity Framework工具POCO Code First Generator的使用

    在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...

  8. 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是一 ...

  9. 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 ...

随机推荐

  1. 微信小程序 功能函数picker-view的弹出模态

    <view class="list"> <form bindsubmit="formSubmit"> <view class=&q ...

  2. app流畅度测试--使用FPS Meter

    1.FFPS Meter是一款非常实用的小软件,能够用数字实时显示安卓界面的每秒帧数,非常直观.此外,FPS Meter还可以显示最大帧数.最小帧数以及平均帧数,用来评价安卓流畅度极具价值.由于涉及到 ...

  3. APP 测试 与 WEB 测试的本质区别

    单纯从功能测试的层面上来讲的话,APP 测试.web 测试 在流程和功能测试上是没有区别的 根据两者载体不一样,则区别如下: 1.系统结构方面 web项目,b/s架构,基于浏览器的:web测试只要更新 ...

  4. SPOJ_LCS2

    和上个题目差不多,这次是找若干个串的LCS,若干<=10 . 做法上面也是类似的. 首先以第一个建立SAM,然后后面的串都在上面更新.每个串的更新是独立进行的,互不影响.对于同一状态,首先在同一 ...

  5. 一条慢SQL引发的血案

    直接切入正题吧: 通常来说,我们看到的慢查询一般还不致于导致挂站,顶多就是应用响应变慢不过这个恰好今天被我撞见了,一个慢查询把整个网站搞挂了先看看这个SQL张撒样子: # Query_time: 70 ...

  6. 【转载】JSP生成静态Html页面

    在网站项目中,为了访问速度加快,为了方便百度爬虫抓取网页的内容,需要把jsp的动态页面转为html静态页面.通常有2种常用的方式: 1.伪静态,使用URL Rewriter 2.纯静态,本文中代码实现 ...

  7. 【科技】KD-tree随想

    大概就是个复杂度对的暴力做法,在你不想写二维线段树等的时候优秀的替代品. 优点:思路简单,代码好写. 他大概有两种用法(虽然差不多). 在平面坐标系中干一些事情: 例如最常规的平面最近最远点,不管是欧 ...

  8. 洛谷 P2751 [USACO4.2]工序安排Job Processing 解题报告

    P2751 [USACO4.2]工序安排Job Processing 题目描述 一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B.每个操作只有一些机器能够完成. 上图显示了按照下述方式 ...

  9. 为什么Spring Boot推荐使用logback-spring.xml来替代logback.xml来配置logback日志的问题分析

    最根本的原因: 即,logback.xml加载早于application.properties,所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.proper ...

  10. Leetcode 503. 下一个更大元素 II

    1.题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应 ...