前言:
最近在开始尝试使用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