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调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

理想主义者

理想主义者

[美] 贾斯汀·彼得斯 / 程静、柳筠 / 重庆出版社 / 2018-5-15 / 49.80元

2013年1月11日,年仅26岁的黑客亚伦·斯沃茨自杀身亡,此事在美国引起轩然大波。这不仅是因为在互联网领域,斯沃茨是一个可以与比尔·盖茨、马克·扎克伯格、理查德·斯托曼等齐名的人,更是因为此事揭露了传统世界与互联网世界的规则冲突。 在互联网思维下,信息是明码标价的商品。各种利益方用技术竖起了一道道藩篱,将支付不起费用但渴望用知识改变命运的人隔绝在外。于是,一大批希望改变这种模式的“理想主义......一起来看看 《理想主义者》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

MD5 加密
MD5 加密

MD5 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具