zoukankan      html  css  js  c++  java
  • 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中新增的)用于定义使用的提供者,和其它可选的配置

     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 项目路径packagesEntityFramework.6.1.3(EF版本) oolsEntityFramework.psd1)

       另外需要注意的是,执行命令时,默认项目一定要选择包含模型的项目,如图:

       说到推荐,和阅读,我有一个不明白的地方,为什么,什么这个感悟,那个经历的文章都会有很高的阅读量和推荐数呢?有一些写得比较好的博客(比如有些大牛写的DDD类的文章)却只有几百的阅读量。难道我们.NET开发人员缺少的不是技术,是心灵鸡汤? 为什么呢?你能告诉我吗?

      

      今天 就先说这么多吧,感谢你的阅读!

    实体框架交流QQ群:  458326058,欢迎有兴趣的朋友加入一起交流

    谢谢大家的持续关注,我的博客地址:http://www.cnblogs.com/VolcanoCloud/

  • 相关阅读:
    网页返回码大全
    求数组中子数组的最大和
    什么是面向对象?面向对象与面向过程的区别?
    Java内部类
    Java拆箱装箱
    linux中su和sudo区别
    Linux 中账户管理
    解决warn appiumdoctor bin directory for $java_home is not set
    Moco之include
    Mock server 之 Moco的使用
  • 原文地址:https://www.cnblogs.com/VolcanoCloud/p/4837748.html
Copyright © 2011-2022 走看看