EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)同樣,數據庫
一是爲了使開發人員以操做對象的方式去操做關係型數據表。app
二是爲了屏蔽底層不一樣廠商的數據庫,開發人員面向ORM框架編寫數據的CRUD(Create,Retrieve,Update,Delete)操做,再由ORM框架將這些操做翻譯成不一樣數據庫廠商的語言。框架
從EF 4.X開始支持三種構建方法:1. Database First方法。2.Model First方法。3.Code First 方法。ide
本次測試以Visual Studio2013 / MS Sql Server2012 / Entity Framework 6.X 測試EF 工具
Code First Demo【此時數據庫和表格都已經存在,爲了在原有項目中引入EF,須要使用這種方式】測試
【關鍵:上下文,實體類的約束及關係】this
//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>
原有項目中,已經有了模型類,因此再也不從新生成模型類spa
操做步驟:翻譯
1>引入程序集EntityFramework.dll,System.Data.Entity.dll3d
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數據庫爲:
【未完,待續】