ef core 1.1 mysql_ASP.NET Core 1.1通过EF Core访问Mysql及linux调试

前言:

最近在开始尝试使用dotnet core做开发,dotnet core发布到1.1也越发成熟了,微软提供的文档也很详细,跟着

而EF Core的文档主要针对Sql Server,其他数据库并没有那么详细,写的过程中确实遇到一些问题,搜集各方资料,这里做一个汇总。

一、访问Mysql

先根据文档写出一个简单的测试程序,这里不再赘述

这里因为VS2017低版本的bug可能会不能运行,手动检查更新,工具->扩展和更新->更新

然后在Package Manager Console输入

Install-Package MySql.Data.EntityFrameworkCore -Pre

安装好后,修改startup文件中ConfigureServices方法,

将UseSqlServer改为UseMySQL

1 public void ConfigureServices(IServiceCollection services)2 {3 services.AddDbContext(options =>

4 options.UseMySQL(Configuration.GetConnectionString("MysqlConnection")));5

6 services.AddMvc();7 }

此时若不能识别命名空间,需要手动添加

using MySQL.Data.EntityFrameworkCore.Extensions;

7.0.7-m61版本的provider访问Mysql可能需要在执行前后打开和关闭连接

1 _context.Database.OpenConnection();2 await_context.SaveChangesAsync();3 _context.Database.CloseConnection();

如果要执行存储过程或者sql有三种方法(1和2是sql server的例子,做适当修改即可),可以参考issue3115

1

1 using (var context = newNorthwindContext())2 {3 var parameter = newSqlParameter4 {5 ParameterName = "@CustomerID",6 Value = "ALFKI"

7 }8

9 context.Database.ExecuteSqlCommand("[dbo].[CustOrderHist] @CustomerID", parameter)10 }

2

1 using (var context = newNorthwindContext())2 {3 var parameter = newSqlParameter4 {5 ParameterName = "@City",6 Value = "London"

7 }8

9 var customers =context.Customers10 .FromSql(@"SELECT * FROM ""Customers"" WHERE ""City"" = @city", parameter)11 .ToArray();12 }

3以及传统方法,这里补充上Mysql存储过程调用的例子

1 var test_cores = newTest_Core[] { };2 var test_core = newTest_Core();3

4 var parameter = new MySqlParameter("?p_id", MySqlDbType.Int16);5 parameter.Value = 1;6 parameter.Direction =ParameterDirection.Input;7 //1

8 using (var cmd =_context.Database.GetDbConnection().CreateCommand())9 {10 _context.Database.OpenConnection();11

12 cmd.CommandType =CommandType.StoredProcedure;13 cmd.CommandText = "sp_test_core";14 cmd.Parameters.Add(parameter);15 DbDataReader result;16 result = awaitcmd.ExecuteReaderAsync();17 while(result.Read())18 {19 test_core.Id = int.Parse(result[0].ToString());20 test_core.key = result[1].ToString();21 test_core.value = result[2].ToString();22 }23 _context.Database.CloseConnection();24 }

25 //2

26 var result_num = _context.Database.ExecuteSqlCommand("sp_test_core(?p_id)", parameter);27

28 //3 TEST_CORE是content中定义的model的DbSet

29 test_cores = _context.TEST_CORE.FromSql(@"call sp_test_core(?p_id)", parameter).ToArray();30

DataTable目前已经没有了,不排除会在之后的版本加回来的可能性,现在接收数据使用DbDataReader

编写测试页面即可看到结果,MVC相关这里不再赘述。

二、linux调试

dotnet core提供的跨平台的web server为KestrelHttpServer,将项目文件完整拷贝到linux机上,在项目目录先输入

dotnet restore

再输入

dotnet run

即可运行调试。

如果想要在局域网中远程访问页面,在安装openssh并运行之后,

通过以下命令运行,即可自定义端口,ip为局域网中本地分配的ip,参考issue639

ASPNETCORE_URLS="http://192.168.0.1:5000" dotnet run

dotnet core默认端口是localhost:5000,也可以在程序中使用UseUrls自定义端口

1 var builder = newWebHostBuilder()2 .UseContentRoot(Directory.GetCurrentDirectory())3 .UseConfiguration(config)4 .UseStartup()5 .UseKestrel(options =>

6 {7 if (config["threadCount"] != null)8 {9 options.ThreadCount = int.Parse(config["threadCount"]);10 }11 })12 .UseUrls("http://localhost:5000");

三、关于发布

如果想发布对应版本,这里以ubuntu.16.04-x64为例,在csproject文件中添加对应的RID,参考.NET Core 运行时标识符 (RID) 目录

$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;

ubuntu.16.04-x64

控制台输入

dotnet publish -r ubuntu.16.04-x64

即可publish到 ubuntu.16.04-x64文件夹,参考issue77

转载请保留出处http://www.cnblogs.com/kira-trash-can/p/6841403.html

参考链接:

https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

https://docs.microsoft.com/en-us/ef/core/providers/

https://www.nuget.org/packages/MySql.Data.EntityFrameworkCore/

https://github.com/aspnet/EntityFramework/issues/3115

https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction

https://github.com/aspnet/KestrelHttpServer/issues/639

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值