昨天,咱們介紹了EF的新特性和開發計劃,若是你還不瞭解,請移步 Entity Framework7 有哪些不一樣?如今開發到什麼程度了? 。今天,咱們開學習全功能.NET(Full .NET)下使用EF7。官方已經寫了關於最新的 Pre-Release版本EF7.0.0-beta7的入門教程,很詳細,我就沒有必要本身再重複造輪子了,只由於是英文的,爲了方便很多懶人(不是看不懂英文,是看着英文就不想看下去,無名的以爲複雜。還有一點就是不肯意去國外的站點去查找資料),特做一個簡單的翻譯。若是你不是懶人的話,請穩步(原文地址: http://ef.readthedocs.org/en/latest/getting-started/full-dotnet.html),隨便幫幫我看看,有什麼不妥的地方,歡迎指正,謝謝!html
本文,咱們將構建一個控制檯應用,讓它使用EF7執行基本的數據訪問。你將在本文看到以下的知識點:git
一、安裝 NuGet 2.8.6 或更高版本;github
二、建立一個新的項目;sql
三、安裝實體框架(EF7.0.0-beta7);數據庫
四、建立模型;api
五、建立數據庫;框架
六、使用模型;ide
你能夠在Github上查看本文的示例:https://github.com/aspnet/EntityFramework.Docs/tree/master/docs/getting-started/full-dotnet/sample函數
注意:本文使用的版本是EF7.0.0-beta7,它是在NuGet.org上可用的最新預發行版本。 你能夠在 https://www.myget.org/F/aspnetvnext/api/v2/ 獲取最新代碼的編譯版本。代碼變化太快,咱們不會爲入門教程維護最新的文檔。post
1、安裝 NuGet 2.8.6 或更高版本
安裝EF7須要NuGet2.8.6,或更高的版本。安裝更新後,請重啓你的Visual Studio。
一、Visual Studio 2015 不須要安裝,由於它已經包含了一個兼容版本;
二、Visual Studio 2013 請安裝針對VS2013的最新的NuGet版本;
三、Visual Studio 2012 請安裝針對VS2012的最新的NuGet版本;
注意:NuGet 版本號可能會形成混淆,咱們所需的是 2.8.6 擴展版本2.8.60610.xxx。
2、建立一個新項目
一、打開Visual Studio(本文使用的是Visual Studio 2015,你可使用VS2012及以上的版本);
二、文件(File)->新建(New)->項目(Project)...
三、從左邊菜單選擇Template->Visual C#->Windows;
四、選擇 Console Application(控制檯應用)項目模板;
五、選擇.NET4.5或者更高的.NET框架;
六、給你的項目命名,而後點肯定(OK);
3、安裝Entity FrameWork
爲了能使用EF7,你得先安裝上你想使用的數據庫及提供者(Provider),本文使用的是 SQL Server。下面是EF7下可用的數據庫提供者(Database Provider)清單。
一、EntityFramework.SqlServer 二、EntityFramework.SQLite 三、EntityFramework.InMemory 四、EntityFramework.SqlServerCompact40 五、EntityFramework.SqlServerCompact35 六、EntityFramework.Npgsql
A、在菜單上選擇Tools->Nuget Package Manager(Nuget 程序包管理器)->Package Manager Console(程序包管理器控制檯);
B、運行命令 「Install-Package EntityFramework.SqlServer –Pre」
由於本文後面還要使用實體框架的相關命令來維護數據庫,因此咱們如今還得安裝命令程序包(Commands package)。
C、運行命令「Install-Package EntityFramework.Commands –Pre」;
4、建立模型
如今是時候定義一個上下文和實體類來構建模型了。
一、Project->Add Class(添加類)...;
二、鍵入Modle.cs做爲類名,並點擊OK(肯定);
三、使用下面的代碼替換文件中的內容;
注意: OnConfiguring 方法(EF7中新增的)用於定義使用的提供者,和其它可選的配置。
1 using Microsoft.Data.Entity; 2 using System.Collections.Generic; 3 4 namespace EFGetStarted.ConsoleApp 5 { 6 public class BloggingContext : DbContext 7 { 8 public DbSet<Blog> Blogs { get; set; } 9 public DbSet<Post> Posts { get; set; } 10 11 protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 12 { 13 // Visual Studio 2015 | 使用Visual Studio建立的LocalDb 12 實例 14 optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 15 16 // Visual Studio 2013 | 使用Visual Studio建立的LocalDb 11 實例 17 // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 18 19 // Visual Studio 2012 | 使用Visual Studio建立的SQL Express實例 20 // optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 21 } 22 23 protected override void OnModelCreating(ModelBuilder modelBuilder) 24 { 25 // 配置Blog.Url爲Required 26 modelBuilder.Entity<Blog>() 27 .Property(b => b.Url) 28 .Required(); 29 } 30 } // 博客 31 public class Blog 32 { 33 public int BlogId { get; set; } 34 public string Url { get; set; } 35 36 public List<Post> Posts { get; set; } 37 } 38 // 文章 39 public class Post 40 { 41 public int PostId { get; set; } 42 public string Title { get; set; } 43 public string Content { get; set; } 44 45 public int BlogId { get; set; } 46 public Blog Blog { get; set; } 47 } 48 }
5、建立數據庫
擁有模型以後,就可使用數據遷移(Migrations)來建立數據庫.
一、在菜單上選擇Tools->Nuget Package Manager(Nuget 程序包管理器)->Package Manager Console(程序包管理器控制檯);
二、執行命令「Add-Migration MyFirstMigration」 爲剛纔的模型建立一個遷移支架(scaffold);
三、執行命令「Update-Database」 應用一個遷移到數據庫。由於數據庫不存在,因此在應用遷移以前,它會爲你建立一個數據庫;
提示:若是你對模型時行了修改,請使用命令「Add-Migration」支架(scaffold)一個新的遷移來應用相應的修改。你一旦檢查並確認了生成的支架(scaffold)代碼,便使用命令「Update-Database」應用這些修改到數據庫。
6、使用模型
如今可使用模型執行數據訪問了。
一、打開文件 Program.cs;
二、使用下面的代碼替換文件中的內容;
1 using System; 2 3 namespace EFGetStarted.ConsoleApp 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 using (var db = new BloggingContext()) 10 { 11 db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); 12 var count = db.SaveChanges(); 13 Console.WriteLine("{0} records saved to database", count); 14 15 Console.WriteLine(); 16 Console.WriteLine("All blogs in database:"); 17 foreach (var blog in db.Blogs) 18 { 19 Console.WriteLine(" - {0}", blog.Url); 20 } 21 } 22 } 23 } 24 }
二、Debug->Start Without Debugging(開始執行(不調試));
你將看到一個blog被保存到了數據庫中,並在控制檯打出來blog的詳細內容,如圖:
正如你看到的,文中使用了數據遷移命令,隨着code-first的普遍使用,相信使用它的機會會愈來愈多,下面我把本身使用中遇到的一常問題分享給你們。
相似下面的異常:
enable-migrations
enable-migrations : 沒法將「enable-migrations」項識別爲 cmdlet、函數、腳本文件或可運行程序的名稱。請檢查名稱的拼寫,若是包括路徑,請確保路徑正確,而後再試一次。
所在位置 行:1 字符: 1
+ enable-migrations
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (enable-migrations:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException。
致使這個問題緣由通常以下:
一、輸入的中劃線「-」格式不對,檢查是否爲全角狀態下輸入,誤輸入了下劃線「_",或是先後有空格;
二、沒有引用EntityFramework命令,請執行以下名稱(Import-Module 項目路徑\packages\EntityFramework.6.1.3(EF版本)\tools\EntityFramework.psd1)
另外須要注意的是,執行命令時,默認項目必定要選擇包含模型的項目,如圖:
說到推薦,和閱讀,我有一個不明白的地方,爲何,什麼這個感悟,那個經歷的文章都會有很高的閱讀量和推薦數呢?有一些寫得比較好的博客(好比有些大牛寫的DDD類的文章)卻只有幾百的閱讀量。難道咱們.NET開發人員缺乏的不是技術,是心靈雞湯? 爲何呢?你能告訴我嗎?