昨天,咱们介绍了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开发人员缺乏的不是技术,是心灵鸡汤? 为何呢?你能告诉我吗?