博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Core 1.1通过EF Core访问Mysql及linux调试
阅读量:5057 次
发布时间:2019-06-12

本文共 4260 字,大约阅读时间需要 14 分钟。

前言:

最近在开始尝试使用dotnet core做开发,dotnet core发布到1.1也越发成熟了,微软提供的文档也很详细,跟着 的步骤可以掌握一个基本的ASP.NET Core web application的创建方法。

而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的例子,做适当修改即可),可以参考

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.Customers10         .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     //226     var result_num = _context.Database.ExecuteSqlCommand("sp_test_core(?p_id)", parameter);27 28     //3 TEST_CORE是content中定义的model的DbSet29     test_cores = _context.TEST_CORE.FromSql(@"call sp_test_core(?p_id)", parameter).ToArray();30

 

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

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

 

 

二、linux调试

 

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

dotnet restore

 

再输入

dotnet run

即可运行调试。

 

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

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

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
() 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,参考

$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;
ubuntu.16.04-x64

 

控制台输入

dotnet publish -r ubuntu.16.04-x64

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

 

可以通过Nginx等反向代理来部署core程序,参考

 

转载请保留出处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

转载于:https://www.cnblogs.com/kira-trash-can/p/6841403.html

你可能感兴趣的文章
Swift 中的指针使用
查看>>
Swift - 使用闭包筛选过滤数据元素
查看>>
alue of type java.lang.String cannot be converted to JSONObject
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
JAVA设计模式之简单工厂模式与工厂方法模式
查看>>
③面向对象程序设计——封装
查看>>
【19】AngularJS 应用
查看>>
Spring
查看>>
Linux 系统的/var目录
查看>>
Redis学习---Redis操作之其他操作
查看>>
WebService中的DataSet序列化使用
查看>>
BZOJ 1200 木梳
查看>>
【Linux】【C语言】菜鸟学习日志(一) 一步一步学习在Linxu下测试程序的运行时间...
查看>>
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>
Oracle学习之简单查询
查看>>
log4j配置
查看>>
linux 配置SAN存储-IPSAN
查看>>