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

轉自: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)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章