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(含源码)另附数据迁移常见错误处理的更多相关文章

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

    昨天,我们介绍了EF的新特性和开发计划,如果你还不了解,请移步 Entity Framework7 有哪些不同?现在开发到什么程度了? .今天,我们开学习全功能.NET(Full .NET)下使用EF ...

  2. Ubuntu 17.04版本下,opencv进行源码编译安装

    本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...

  3. ABP入门系列(12)——如何升级Abp并调试源码

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 升级Abp 本系列教程是基于Abp V1.0版本,现在Abp版本已经升级至V1.4.2(截至 ...

  4. Delphi:程序自己删除自己,适用于任何windows版本(含源码)

    Delphi:程序自己删除自己,适用于任何windows版本(含源码) function Suicide: Boolean; var   sei: TSHELLEXECUTEINFO;   szMod ...

  5. Tomcat各个版本的下载地址包括源码

    Tomcat各个版本的下载地址包括源码: http://archive.apache.org/dist/tomcat **************** 选择版本 **************** ** ...

  6. 百度地图整合功能分享修正版[ZMap.js] 实例源码!

    ZMap 功能说明 ZMap 是学习百度地图 api 接口,开发基本功能后整的一个脚本类,本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是 ...

  7. VB版本查询快递单号源码

    能查询各大快递单号,包括申通快递,圆通快递,韵达快递等国内超过90家以上快递单号查询, 如果想快速搭建一个快递单号查询站我推荐这个,这是地址www.aikuaidi.cn,我分享一个VB Functi ...

  8. MySql轻松入门系列——第二站 使用visual studio 对mysql进行源码级调试

    一:背景 1. 讲故事 上一篇说了mysql的架构图,很多同学反馈说不过瘾,毕竟还是听我讲故事,那这篇就来说一说怎么利用visual studio 对 mysql进行源码级调试,毕竟源码面前,不谈隐私 ...

  9. 2020高考倒计时!全屏向下滑动设计HTML源码

    全屏竖向滑动效果,自适应,多终端 全国高考倒计时,音乐自动播放. 背景图片:img目录下替换bg.jpg  背景音乐:audio目录下替换song.mp3 原本按照正常情况下每年的6月7.8日就是全国 ...

随机推荐

  1. 13.final关键字

    1.final修饰的变量只能赋一次值,不赋值时,会提示初始化 2.final修饰的方法不能被重写 3.final修饰的类不能被继承

  2. USACO翻译:USACO 2014 JAN三题(2)

    USACO 2014 JAN 一.题目概览 中文题目名称 队伍平衡 滑雪录像 滑雪场建设 英文题目名称 bteams recording skicourse 可执行文件名 bteams recordi ...

  3. DoModal时带出次级窗口闪现

    最近在做MFC 界面开发. 在一个CDialog窗口DoModal模态显示时, 会将次级窗口带出闪现(比如将一个窗口active, 然后点击我现在程序需要弹框的按钮,弹出弹出正常,但原来active的 ...

  4. Sublime Text安装Package Control

    原来Sublime Text3安装Package Control很麻烦,现在简单的方法来了! 一.简单的安装方法 使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行 ...

  5. spring的IOC和AOP协同工作

    看网络上的spring资料,基本都是在讲解IOC和AOP,但是二者是如何协同工作的,说的很少. 粗略调试了下BeanFactory的创建过程,发现是如图所示的大概过程.其中BeanPostProces ...

  6. 「iOS造轮子」之UIButton 用Block响应事件

    俗语说 一个不懒的程序员不是好程序员 造轮子,也只是为了以后更好的coding. coding,简易明了的代码更是所有程序员都希望看到的 无论是看自己的代码,还是接手别人的代码 都希望一看都知道这代码 ...

  7. Apache Kafka - Schema Registry

    关于我们为什么需要Schema Registry? 参考, https://www.confluent.io/blog/how-i-learned-to-stop-worrying-and-love- ...

  8. (转)百度编辑器java使用

    说在前面 工作中会遇到很多需要使用富文本编辑器的地方,比如我现在发布这篇文章离不开这个神器,而且现在网上编辑器太多了.记得之前,由于工作需要自己封装过一个编辑器的公共插件,是用ckeditor改版的, ...

  9. 移动端rem 适配

    在 index.html 中添加如下代码 <script> let html = document.documentElement; window.rem = html.getBoundi ...

  10. wordpress取文章时间

    wordpress的时间处理, 取文章的本地时间用get_the_time('c'),其中c可以用“D, d M Y H:i:s"等替代. 取文章的UTC时间用get_post_time(' ...