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开发人员缺少的不是技术,是心灵鸡汤? 为什么呢?你能告诉我吗?
Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7的更多相关文章
- Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理
Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7 昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Fr ...
- Entity Framework7 有哪些不同?之具体功能
Entity Framework7 有哪些不同?之具体功能 前面我们介绍了关于EF7的新特性.开发计划和入门介绍.今天,我们来看看EF7的具体新功能及用法.本文中的环境,为EF7入门里介绍的环境. 1 ...
- Entity Framework7 有哪些不同?现在开发到什么程度了?
Entity Framework7之开篇 一.Entity Framework7 简介 Entity Framework7简称EF7,是微软正在开发的最新的在.NET应用中首选的数据访问技术.它是轻量 ...
- [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题
花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...
- Entity Framework入门系列(1)-扯淡开篇
这是我在Cnblogs上的第一个系列,但愿能坚持下去: 惯例索引 Entity Framework入门系列(1)-开篇兼索引: Entity Framework入门系列(2)-初试Code First ...
- (二)cordova+framework7入门——笑笑APP
[前言] framework7确实做的很赞,但是一直各种原因没有做什么app, 这个感觉就像大厨遇到百年难见的好材料,不炒个菜憋的慌, 机缘巧合周一周二两个晚上做了一个简单app,先看下效果: ios ...
- StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程)
@ 目录 StringBoot整合ELK实现日志收集和搜索自动补全功能(详细图文教程) 一.下载ELK的安装包上传并解压 1.Elasticsearch下载 2.Logstash下载 3.Kibana ...
- OpenResty 是一个全功能的 Web 应用服务器
OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过众多进行良好设计的 ...
- gocode+auto-complete搭建emacs的go语言自动补全功能
上篇随笔记录了在emacs中使用go-mode和goflymake搭建了go语言的简单编程环境(推送门),今天来记录一下使用gocode+auto-complete配置emacs中go语言的自动补全功 ...
随机推荐
- 创建 dblink
目的:oracle中跨数据库查询 两台数据库服务器db_A(本地)和db_B(远程192.168.1.100),db_A下用户user_a 需要访问到db_B下user_b的数据解决:查询 ...
- POJ 2186 Popular cows(Kosaraju+强联通分量模板)
题目链接:http://poj.org/problem?id=2186 题目大意:给定N头牛和M个有序对(A,B),(A,B)表示A牛认为B牛是红人,该关系具有传递性,如果牛A认为牛B是红人,牛B认为 ...
- @PathVariable @RequestParam @RequestBody 的区别
转载自:@RequestParam @RequestBody @PathVariable 等参数绑定注解详解 简介: handler method 参数绑定常用的注解,我们根据他们处理的Request ...
- Django之管理权限
什么是权限: 谁对什么资源能做什么操作. 管理权限的实现有很多,这里实现一个最简单的管理权限的实现方式:rbac ( role based access control ) 实现的一个基本思路: ...
- 基于layui+cropper.js实现上传图片的裁剪功能
最近因项目需求,需要在上传图片的时候先对图片裁剪,然后在上传,所以就有了本文的出现. 开始正文之前,要提一下这个图片的裁剪:图片的裁剪,有前端裁剪,也可以后端裁剪 前端的裁剪我知道的可以分为这么两种: ...
- ueditor 编辑器上传到服务器后图片上传不能正常使用
网站集成ueditor编辑器后在本地能正常使用,上传到服务器上后,图片上传功能提示:后端配置项没有正常加载,上传插件不能正常使用.且单个图片上传图标是灰色的不能点击. 相信遇到这个问题的同学是很多的吧 ...
- you have to first modify the default Eclipse configuration to avoid XML cosmetic errors:
Configure XML Validation to Avoid Cosmetic Errors Navigate to: Window->Preferences->XML->XM ...
- Linux下进程信息/proc/pid/status的深入分析
https://blog.csdn.net/beckdon/article/details/48491909
- Expert C Programming 阅读笔记(~CH1)
P4: 好梗!There is one other convention—sometimes we repeat a key point to emphasize it. In addition, w ...
- Python-函数总结
把程序分解成较小的部分,主要有3种方法. 函数(function) 对象(object) 模块(module) 本节我们先学习函数.函数是带名字的代码块,可以把多个逻辑封装起来.这样就可以在程序中可以 ...