轉自:http://www.cnblogs.com/VolcanoCloud/p/4837748.html
昨天,我們介紹了EF的新特性和開發計劃,如果你還不瞭解,請移步 Entity Framework7 有哪些不同?現在開發到什麼程度了? 。今天,我們開學習全功能.NET(Full .NET)下使用EF7。官方已經寫了關於最新的 Pre-Release版本EF7.0.0-beta7的入門教程,很詳細,我就沒有必要自己再重複造輪子了,只因爲是英文的,爲了方便不少懶人(不是看不懂英文,是看着英文就不想看下去,無名的覺得複雜。還有一點就是不願意去國外的站點去查找資料),特作一個簡單的翻譯。如果你不是懶人的話,請穩步(原文地址: http://ef.readthedocs.org/en/latest/getting-started/full-dotnet.html),隨便幫幫我看看,有什麼不妥的地方,歡迎指正,謝謝!
本文,我們將構建一個控制檯應用,讓它使用EF7執行基本的數據訪問。你將在本文看到如下的知識點:
1、安裝 NuGet 2.8.6 或更高版本;
2、創建一個新的項目;
3、安裝實體框架(EF7.0.0-beta7);
4、創建模型;
5、創建數據庫;
6、使用模型;
你可以在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/ 獲取最新代碼的編譯版本。代碼變化太快,我們不會爲入門教程維護最新的文檔。
一、安裝 NuGet 2.8.6 或更高版本
安裝EF7需要NuGet2.8.6,或更高的版本。安裝更新後,請重啓你的Visual Studio。
1、Visual Studio 2015 不需要安裝,因爲它已經包含了一個兼容版本;
2、Visual Studio 2013 請安裝針對VS2013的最新的NuGet版本;
3、Visual Studio 2012 請安裝針對VS2012的最新的NuGet版本;
注意:NuGet 版本號可能會造成混淆,我們所需的是 2.8.6 擴展版本2.8.60610.xxx。
二、創建一個新項目
1、打開Visual Studio(本文使用的是Visual Studio 2015,你可以使用VS2012及以上的版本);
2、文件(File)->新建(New)->項目(Project)...
3、從左邊菜單選擇Template->Visual C#->Windows;
4、選擇 Console Application(控制檯應用)項目模板;
5、選擇.NET4.5或者更高的.NET框架;
6、給你的項目命名,然後點確定(OK);
三、安裝Entity FrameWork
爲了能使用EF7,你得先安裝上你想使用的數據庫及提供者(Provider),本文使用的是 SQL Server。下面是EF7下可用的數據庫提供者(Database Provider)清單。
1、EntityFramework.SqlServer
2、EntityFramework.SQLite
3、EntityFramework.InMemory
4、EntityFramework.SqlServerCompact40
5、EntityFramework.SqlServerCompact35
6、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”;
四、創建模型
現在是時候定義一個上下文和實體類來構建模型了。
1、Project->Add Class(添加類)...;
2、鍵入Modle.cs作爲類名,並點擊OK(確定);
3、使用下面的代碼替換文件中的內容;
注意: 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 }
五、創建數據庫
擁有模型之後,就可以使用數據遷移(Migrations)來創建數據庫.
1、在菜單上選擇Tools->Nuget Package Manager(Nuget 程序包管理器)->Package Manager Console(程序包管理器控制檯);
2、執行命令“Add-Migration MyFirstMigration” 爲剛纔的模型創建一個遷移支架(scaffold);
3、執行命令“Update-Database” 應用一個遷移到數據庫。因爲數據庫不存在,所以在應用遷移之前,它會爲你創建一個數據庫;
提示:如果你對模型時行了修改,請使用命令“Add-Migration”支架(scaffold)一個新的遷移來應用相應的修改。你一旦檢查並確認了生成的支架(scaffold)代碼,便使用命令“Update-Database”應用這些修改到數據庫。
六、使用模型
現在可以使用模型執行數據訪問了。
1、打開文件 Program.cs;
2、使用下面的代碼替換文件中的內容;
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 }
2、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。
導致這個問題原因一般如下:
1、輸入的中劃線“-”格式不對,檢查是否爲全角狀態下輸入,誤輸入了下劃線“_",或是前後有空格;
2、沒有引用EntityFramework命令,請執行如下名稱(Import-Module 項目路徑\packages\EntityFramework.6.1.3(EF版本)\tools\EntityFramework.psd1)
另外需要注意的是,執行命令時,默認項目一定要選擇包含模型的項目,如圖: