ASP.NET Core 1.1通过EF Core访问MySQL及Linux调试

栏目: ASP.NET · 发布时间: 7年前

内容简介:ASP.NET Core 1.1通过EF Core访问MySQL及Linux调试

前言:

最近在开始尝试使用dotnet core做开发,dotnet core发布到1.1也越发成熟了,微软提供的文档也很详细,跟着 Getting started with ASP.NET Core MVC and Entity Framework Core using Visual Studio (1 of 10)  的步骤可以掌握一个基本的ASP.NET Core web application的创建方法。

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

一、访问Mysql

Getting started with ASP.NET Core MVC and Entity Framework Core using Visual Studio (1 of 10)

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

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

然后在Package Manager Console输入

Install-Package MySql.Data.EntityFrameworkCore -Pre

安装 MySql对应的provider (同时还有 个人开发的provider ,本文将不再介绍)

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

将UseSqlServer改为UseMySQL

1 public void ConfigureServices(IServiceCollection services)
2 {
3     services.AddDbContext<YourContent>(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 = new NorthwindContext())
 2 {
 3     var parameter = new SqlParameter
 4     {
 5         ParameterName = "@CustomerID",
 6         Value = "ALFKI"
 7     }
 8 
 9     context.Database.ExecuteSqlCommand("[dbo].[CustOrderHist] @CustomerID", parameter)
10 } 

2

 1 using (var context = new NorthwindContext())
 2 {
 3     var parameter = new SqlParameter
 4     {
 5         ParameterName = "@City",
 6         Value = "London"
 7     }
 8 
 9     var customers = context.Customers
10         .FromSql(@"SELECT * FROM ""Customers"" WHERE ""City"" = @city", parameter)
11         .ToArray();
12 }

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

 1 var test_cores = new Test_Core[] { };
 2 var test_core = new Test_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 = await cmd.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 = new

WebHostBuilder()

2

.UseContentRoot(Directory.GetCurrentDirectory())

3

.UseConfiguration(config)

4 .UseStartup<Startup>

()

5 .UseKestrel(options =>
6

{

7 if (config[ " threadCount " ] != null

)

8

{

9 options.ThreadCount = int .Parse(config[ " threadCount "

]);

10

}

11

})

12 .UseUrls( " http://localhost:5000

"

);

更多相关可参考 Introduction to Kestrel web server implementation in ASP.NET Core

三、关于发布

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

<PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback>
    <RuntimeIdentifier>ubuntu.16.04-x64</RuntimeIdentifier>
  </PropertyGroup>

控制台输入

dotnet publish -r ubuntu.16.04-x64

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

可以通过Nginx等反向代理来部署core程序,参考 Set up a hosting environment for ASP.NET Core on Linux with Nginx, and deploy to it

本文永久更新链接地址 http://www.linuxidc.com/Linux/2017-05/143949.htm


以上所述就是小编给大家介绍的《ASP.NET Core 1.1通过EF Core访问MySQL及Linux调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript

JavaScript

David Flanagan / O'Reilly Media / 2011-5-13 / GBP 39.99

The book is a programmer's guide and comprehensive reference to the core JavaScript language and to the client-side JavaScript APIs defined by web browsers. The sixth edition covers HTML 5 and ECMA......一起来看看 《JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具