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. Nginx和Apache区别

    Nginx VS  Apache 相同点: 1.都是HTTP服务器软件 2.功能上都采用模块化结构设计 3.都支持通用的语言接口,如PHP.Perl.Python等 4.支持正向.反向代理.虚拟主机. ...

  2. Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程

    人原创,一个字一个字地码的,尊重版权,转载请注明出处! http://blog.csdn.net/chaijunkun/article/details/6987443 最近在开发的项目需要承受很高的并 ...

  3. c语言基本数据类型(short、int、long、char、float、double)

    一 C 语言包含的数据类型 short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 在不同的系统上,这些类型占据的字节长度是不同的: 在32 ...

  4. C 数据类型——Day02

    C 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统.变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式. C 中的类型可分为以下几种: 序号 类型与描述 ...

  5. Day22-Django之信号

    1. 如果往数据库中增加数据的时候,希望生成一个日志.在数据保存之前以及保存之后. Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去 ...

  6. oracle +plsql装完省略号不能点

    1.如图 2.复制 TNS 服务名 3.复制到 登录框的 Database ,输入用户名密码,点OK..可以进去了,省略号变成可点击状态

  7. python函数:基础函数调用整理

    声明:以下链接和描述据来自于网络,很多都是来自菜鸟教程 一.字符串 str python字符串格式化符号: %c 格式化字符及其ASCII码  %s 格式化字符串 %d 格式化整数 函数 描述 需要掌 ...

  8. python入门:1-100所有数的和

    #!/usr/bin/env python # -*- coding:utf-8 -*- #1-100所有数的和 """ 给x赋值为1,y赋值为0,while循环真,循环 ...

  9. SpringCloud微服务实战-Zuul-APIGateway(十)

    本文转自:http://blog.csdn.net/qq_22841811/article/details/67637786#准备工作 1 API Gateway 2 Zuul介绍 2.1 zuul的 ...

  10. Java入门:一些初学者需要掌握的基础算法程序——二分查找

    本例演示如何通过二分算法查找一个链表中的指定元素. import java.util.Scanner; class BinarySearchExample { public static void m ...