内容简介: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 可能需要在执行前后打开和关闭连接
_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自定义端口
WebHostBuilder()
2.UseContentRoot(Directory.GetCurrentDirectory())
3.UseConfiguration(config)
4 .UseStartup<Startup>()
5 .UseKestrel(options =>{
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调试》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- VisualStudio 通过外部调试方法快速调试库代码
- 通过Webkit远程调试协议监听网页崩溃.
- Visual Studio 通过修改项目的调试配置文件做到临时调试的时候不要编译(解决大项目编译缓慢问题)
- 如何通过 nginx、php-fpm、PHP 的日志调试程序
- 通过调试 Nginx 源码来定位有趣 Nginx 转发合并斜杠和编码问题
- 通过Windows Visual Studio远程调试WSL2中的.NET Core Linux应用程序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。