微软推出了全新的 .Net Core,于是我就想着在目前接手的项目中使用这项新技术。但是因为预算的原因,我们所用的数据库是 MySql 。但是最新的 EF Core 并不支持 MySql ,所以目前我还是使用的 EF6 。然而微软官网并没有这方面相关的例子,所以今天折腾了一整天,终于把 EF 6 成功配置在了 .Net Core 项目中。

准备

  • VS 2015 中新建一个 ASP.NET Core 项目(由于EF 6 不支持 CoreCLR,所以使用 .Net Framework)
  • 一个根据 Code First 定义的 DbContext 类以及相应的 Entity 类(由于目前的 VS 2015 在 ASP.NET Core 项目中不能直接由数据库生成 Code First 代码,所以我们需要自己手写 Code First 类)

使用

现在来看看我定义的 DbContext

  1. public partial class ParkDbContext : DbContext
  2. {
  3. public ParkDbContext() : base("Data Source=DESKTOP-M31J37E;Initial Catalog=moneyManager;User ID=zeeko;Password=*******")
  4. {
  5. }
  6. public virtual DbSet<LoginInfo> LoginInfo { get; set; }
  7. public virtual DbSet<IncomeAndSpending> IncomeAndSpending { get; set; }
  8. protected override void OnModelCreating(DbModelBuilder modelBuilder)
  9. {
  10. modelBuilder.Entity<IncomeAndSpending>()
  11. .Property(e => e.Type)
  12. .IsUnicode(true);
  13. }
  14. }

出于简单,我们就直接在Controller中使用

  1. public class TestController : Controller
  2. {
  3. private ParkDbContext dbContext=new ParkDbContext();
  4. public string Index()
  5. {
  6. var result = (
  7. from item in dbContext.IncomeAndSpending
  8. select item
  9. ).FirstOrDefault();
  10. return result.Type;
  11. }
  12. }

这样的话,我们就完成了连接!

重构

上面的做法其实是不好的,如果后期我们需要更换数据库,我们需要修改DbContext类,这样做是不对的。

而且在之前的 MVC 4 的项目中,我们是在 web.config 文件中定义的连接字符串,所以我们在 .Net Core 中的如何使用类似的方式来做呢?

重构

首先,我们需要将DbContext的构造函数改造一下

  1. public ParkDbContext(string connectionString) : base(connectionString)
  2. {
  3. }

然后我们在控制器中通过构造函数注入

  1. public TestController(ParkDbContext context)
  2. {
  3. dbContext = context;
  4. }

然后我们在 appsettings.json 文件中定义一下连接字符串

  1. {
  2. "ConnectionStrings": {
  3. "DefaultConnection": "Data Source=DESKTOP-M31J37E;Initial Catalog=moneyManager;User ID=zeeko;Password=windows10zt"
  4. },
  5. "Logging": {
  6. "IncludeScopes": false,
  7. "LogLevel": {
  8. "Default": "Debug",
  9. "System": "Information",
  10. "Microsoft": "Information"
  11. }
  12. }
  13. }

然后在 Startup.cs 文件中的 ConfigureServices 方法中注册一下

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // Add framework services.
  4. services.AddMvc();
  5. services.AddScoped(sp => new ParkDbContext(Configuration["ConnectionStrings:DefaultConnection"]));
  6. // Add application services.
  7. }

至此,我们就可以在配置文件中修改连接字符串了!

后续

接下来,我会试着连接到 MySql


参考文章:

重构 ASP.NET 5/EF6 项目和依赖关系注入

ASP.NET Core + EF6的更多相关文章

  1. [争什么! 掺在一起做撒尿牛丸啊! 笨蛋]ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

  2. 【Asp.Net Core】ASP.NET Core 2.0 + EF6 + Linux +MySql混搭

    好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...

  3. Windows下构建ASP.NET Core+Code First+Docker

    背景介绍 本文将会示范如何在Windows系统下基于ASP.NET Core构建跨平台服务,并通过Docker容器运行发布. 首先说一下为什么选择这一套组合: 我本人和我们Code4Thought团队 ...

  4. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

  6. 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】

    鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash  ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台  ,收 ...

  7. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-1

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 本系列文章为翻译加上我个人的使用心得理解,希望帮助热爱学习的程序员. 珍重声明:本系列文章会跟原文有点出入,去掉了罗里吧嗦的文字. ...

  8. 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

    第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分 ...

  9. 【转载】从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

    Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...

随机推荐

  1. JAVA6开发WebService (四)——SAAJ调用WebService

    转载自http://wuhongyu.iteye.com/blog/810571 前面写了个JAX-WS的小例子,看到用JAVA6开发WebService确实很简单,也很方便,不过前面也说了,JAVA ...

  2. 2016HUAS暑假集训训练2 K - Hero

    题目链接:http://acm.hust.edu.cn/vjudge/contest/121192#problem/K 这也是一道贪心题,刚开始写时以为只要对每一敌人的攻击和血的乘积进行从小到大排序即 ...

  3. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR...

    http://blog.csdn.net/playstudy/article/details/6661868 一,问题描述MSVCRTD.lib(crtexew.obj) : error LNK201 ...

  4. 一些常用的NLTK频率分布类中定义的函数

    fdist=FreqDist(samples)创建包含给定样本的频率分布fist.inc(sample)增加样本fdist['monstrous']计数给定样本出现的次数fdist.freq('mon ...

  5. alpha发布之小组评论

    在alpha发布之后,让我看到了,大家都很努力,在alpha发布前大家都尽量完成自己的项目,虽然大家都很忙,但是,都在抽出时间趟黑起早的完成项目,在你们身上有很多很值得我学习的地方,虽然我认为半夜睡觉 ...

  6. ffmpeg命令行

    ubuntu下简单安装ffmpeg sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-nextsudo apt-get update sudo a ...

  7. django 动态更新属性值

    django 动态更新属性值 class TestTime(models.Model): """ 功能说明:指定测试的每一关总用时 """ ...

  8. 一个ICMP单元

    unit ICMPUtils; interface {$IFDEF VER80} { This source file is *NOT* compatible with Delphi 1 becaus ...

  9. XE系列资源文件的奇怪问题

    这是一个关于资源文件的故事.......-_- 今天写一个功能测试Demo, 为了省事直接在工程文件里Resources And Images里添加了几个图片, 类型都是默认的RCDATA 然后直接就 ...

  10. mvc路由注意事项

    路由表中你增加的路由顺序是很重要的.我们自定义路由是增加在默认路由之前的. 假如你搞反了,那默认路由将永远替代调用自定义路由.