Entity Framework7 入門之全功能.NET版本下使用EF7(含源碼)另附數據遷移常見錯誤處理


Entity Framework7 入門之全功能.NET(Console, WinForms, WPF等)使用EF7

 

  昨天,我們介紹了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)

   另外需要注意的是,執行命令時,默認項目一定要選擇包含模型的項目,如圖:

 

   說到推薦,和閱讀,我有一個不明白的地方,為什么,什么這個感悟,那個經歷的文章都會有很高的閱讀量和推薦數呢?有一些寫得比較好的博客(比如有些大牛寫的DDD類的文章)卻只有幾百的閱讀量。難道我們.NET開發人員缺少的不是技術,是心靈雞湯? 為什么呢?你能告訴我嗎?

  

  今天 就先說這么多吧,感謝你的閱讀!

 

實體框架交流QQ群:  458326058,歡迎有興趣的朋友加入一起交流

謝謝大家的持續關注,我的博客地址:http://www.cnblogs.com/VolcanoCloud/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM