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中新增的)用于定义使用的提供者,和其它可选的配置。
using Microsoft.Data.Entity;
using System.Collections.Generic; namespace EFGetStarted.ConsoleApp
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Visual Studio 2015 | 使用Visual Studio创建的LocalDb 12 实例
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); // Visual Studio 2013 | 使用Visual Studio创建的LocalDb 11 实例
// optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); // Visual Studio 2012 | 使用Visual Studio创建的SQL Express实例
// optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;");
} protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// 配置Blog.Url为Required
modelBuilder.Entity<Blog>()
.Property(b => b.Url)
.Required();
}
}
// 博客
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; } public List<Post> Posts { get; set; }
}
// 文章
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; } public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
五、创建数据库
拥有模型之后,就可以使用数据迁移(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、使用下面的代码替换文件中的内容;
using System; namespace EFGetStarted.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
using (var db = new BloggingContext())
{
db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
var count = db.SaveChanges();
Console.WriteLine("{0} records saved to database", count); Console.WriteLine();
Console.WriteLine("All blogs in database:");
foreach (var blog in db.Blogs)
{
Console.WriteLine(" - {0}", blog.Url);
}
}
}
}
}
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/
Entity Framework7 入门之全功能.NET版本下使用EF7(含源码)另附数据迁移常见错误处理的更多相关文章
- Entity Framework7 入门之全功能.NET(Console, WinForms, WPF等)使用EF7
昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Framework7 有哪些不同?现在开发到什么程度了? .今天,我们开学习全功能.NET(Full .NET)下使用EF ...
- Ubuntu 17.04版本下,opencv进行源码编译安装
本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...
- ABP入门系列(12)——如何升级Abp并调试源码
ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 升级Abp 本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2(截至 ...
- Delphi:程序自己删除自己,适用于任何windows版本(含源码)
Delphi:程序自己删除自己,适用于任何windows版本(含源码) function Suicide: Boolean; var sei: TSHELLEXECUTEINFO; szMod ...
- Tomcat各个版本的下载地址包括源码
Tomcat各个版本的下载地址包括源码: http://archive.apache.org/dist/tomcat **************** 选择版本 **************** ** ...
- 百度地图整合功能分享修正版[ZMap.js] 实例源码!
ZMap 功能说明 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是 ...
- VB版本查询快递单号源码
能查询各大快递单号,包括申通快递,圆通快递,韵达快递等国内超过90家以上快递单号查询, 如果想快速搭建一个快递单号查询站我推荐这个,这是地址www.aikuaidi.cn,我分享一个VB Functi ...
- MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试
一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...
- 2020高考倒计时!全屏向下滑动设计HTML源码
全屏竖向滑动效果,自适应,多终端 全国高考倒计时,音乐自动播放. 背景图片:img目录下替换bg.jpg 背景音乐:audio目录下替换song.mp3 原本按照正常情况下每年的6月7.8日就是全国 ...
随机推荐
- log4j日志文件 log4j.xml log4j.properties配置
1,导入log4j jar包; 2,配置log4j.xml或log4j.properties文件; ------------------------------------------------- ...
- 指针与数组的区别 —— 《C语言深度剖析》读书心得
原书很多已经写的很清楚很精炼了,我也无谓做无意义的搬运,仅把一些基础和一些我自己以前容易搞混的地方写一下. 1. 意义: 指针: 指针也是一种类型,长度为4字节,其存放的内容只能是一个地址(4字节). ...
- JQUERY attr prop 的区别 一个已经被淘汰
在做jquery 全选 全不选的项目中, 1..prop( propertyName ) 获取匹配集合中第一个元素的Property的值 2. .prop( propertyName, value ) ...
- true_kb
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- poj2488骑士马走
#include<stdio.h> #include<stdlib.h> int data[100][100] = {0}; int Dx[8] = {-1,1,-2,2,-2 ...
- shudupoj2676
#include<stdio.h> int num,v[100][2],map[10][10]; bool judge(int x,int y,int k) { int i,j,it,j ...
- Android Root权限的获取
http://www.cnblogs.com/ycmoon/archive/2011/05/11/2042999.html 关于chmod 777:https://www.maketecheasier ...
- 调用CachedRowSetImpl类时出现错误
调用CachedRowSetImpl类时,出现以下错误: Access restriction: The type CachedRowSetImpl is not accessible due to ...
- 快速将一个表的数据生成SQL插入语句
将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了. ) Drop Procedure GenerateData go CREATE PROCEDURE Gen ...
- Another MySQL daemon already running with the same unix socket的解决
问题出现: 每周一需要备份一次数据库,即从服务器MySQL导出sql文件,再导入到我机器上虚拟机的MySQL里.但是今天早上连不上,我进入控制台用#service mysqld start强行启动,报 ...