----------------------------目錄------------------------------
EntityFramework 5.0 CodeFirst 教程03-數據結構的定義/列的屬性 (2015-07-22 17:30)
EntityFramework 5.0 CodeFirst 教程02-刪除和修改/架構改變異常的處理 (2015-07-14 17:50)
EntityFramework 5.0 CodeFirst 教程01-搭建環境和快速上手 (2015-07-13 10:48)
----------------------------目錄------------------------------
網上關於EntityFramework 5.0的教程很多,但是大多數都是代碼整理不清晰,有些甚至是拷貝,代碼丟失等問題,本人最近也有一個項目是用到EntityFramework 5.0 並且是code first的使用方式,鑒於這個在谷歌上面找了一本國外人寫的code first的電子書,英文版的,配合着電子詞典看下去,感覺不錯,寫的非常清晰有條理,所以分享給大家。
首先是電子書的下載,如果想只看電子書的朋友,可以直接下載下來,不用再往下讀了。
下載地址,百度網盤:http://pan.baidu.com/s/1bne2QsR
本教程只適合使用,所以一開始就上代碼了,如果想掌握各種理論的朋友,可能不適合繼續閱讀下去,如果想快速地使用上EntityFramework 5.0 CodeFirst ,可以閱讀下去
創建一個.NET 4.5的控制台應用程序,本人使用的VS 2013 建議讀者也使用這個IDE
就是一個控制台應用程序,下面引用
EntityFramework.dll
首先我們來創建一個Person的類,只有 有姓FirstName 和名LastName 還有主鍵ID(PersonId)
一切從簡單開始,不大喜歡像其他教程一樣,例子都搞得非常復雜,例子應該要抓住核心,排除其他的和主題不關的
bamn.cn
整個類如下:
public class Person { public int PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
我們再創建一個PersonContext 上下文類,需要繼承DbContext
public class PersonContext : DbContext { public PersonContext() : base("name=dblink") { } public DbSet<Person> People { get; set; } }
細心的同學可能看到構造方法后面的
base("name=dblink") 這里的dblink就是數據庫連接名稱了 看下面的配置文件就清楚了
然后就是數據庫的連接了,在配置文件app.config中添加鏈接字符串
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="
dblink
"
connectionString="Data Source=.\MSSQLSERVER2008;Initial Catalog=EFDemo;User ID=sa;Password=123321;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
下面我們就對數據庫進行操作了,首先是創建數據庫,創建數據庫試用EF只需要一句代碼就可以了,EF會幫我們將數據庫還有數據表創建好的
我們在program.cs的main方法中添加下面代碼
class Program { static void Main(string[] args) { using (var personContext = new PersonContext()) { //如果不存在數據庫則創建 bool res = personContext.Database.CreateIfNotExists(); } Console.ReadKey(); } }
我們再查找數據庫,發現已經自動地創建好了數據庫還有表了,看下圖:
這里有一點要注意的:
就是實體Person創建的時候,需要一個主鍵,這個主鍵必須是類名+ID 比如 這里的
PersonId 如果你改成其他的比如
你將類改為PersonModel 但是ID還是 PersonId 那么久會報下面的錯誤了,這里大家要注意的地方,還有就是這里的ID 可以寫成Id都沒問題的,這個應該是微軟的EF框架約定俗成的一個地方吧。
One or more validation errors were detected during model generation:
\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'PersonModel' has no key defined. Define the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'People' is based on type 'PersonModel' that has no keys defined.
下面我們來添加一條數據到表中
在main方法中加入下面代碼
//往數據庫中添加數據 var person = new Person { FirstName = "John", LastName = "Doe" }; personContext.People.Add(person); personContext.SaveChanges();
執行后 查詢表發現記錄已經添加進去了
所有的操作基本都是通過這個context上下文來實現,比如添加記錄,只需要add一個實體進去 然后再savechanges 這個方法執行后,EF才會將數據保存到表里面。
下面再來獲取表中的數據
//獲取數據 var savedPeople = personContext.People; foreach (var p in savedPeople) { Console.WriteLine("Last name:{0},first name:{1},id {2}", p.LastName, p.FirstName, p.PersonId); }
獲取數據也很簡單,這里是獲取所有的記錄,然后遍歷就可以取得數據了,非常方便
當我們執行多次剛才的代碼的時候,EF會添加多條記錄進去,並且ID也不一樣了,ID主鍵是自增長的
所有代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { using (var personContext = new PersonContext()) { //如果不存在數據庫則創建 bool res = personContext.Database.CreateIfNotExists(); //往數據庫中添加數據 var person = new Person { FirstName = "John", LastName = "Doe" }; personContext.People.Add(person); personContext.SaveChanges(); //獲取數據 var savedPeople = personContext.People; foreach (var p in savedPeople) { Console.WriteLine("Last name:{0},first name:{1},id {2}", p.LastName, p.FirstName, p.PersonId); } } Console.ReadKey(); } } }
代碼結構:
本集源碼:
