ASP.NET Core 1.1通過EF Core訪問Mysql及linux調試

来源:http://www.cnblogs.com/kira-trash-can/archive/2017/05/11/6841403.html
-Advertisement-
Play Games

前言: 最近在開始嘗試使用dotnet core做開發,dotnet core發佈到1.1也越發成熟了,微軟提供的文檔也很詳細,跟著Getting started with ASP.NET Core MVC and Entity Framework Core using Visual Studio ...


前言:

最近在開始嘗試使用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.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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 你喜愛的 IDE,現在可用於 Mac 來自:https://www.visualstudio.com/zh hans/vs/visual studio mac/ 驚不驚喜?意不意外?驚喜但不意外,因為在 Visual Studio for Mac 之前,已經有了 Visual Studio Code ...
  • c 枚舉值增加特性說明 通過特性給一個枚舉類型每個值增加一個字元串說明,用於列印或顯示。 自定義列印特性 [AttributeUsage(AttributeTargets.Field)] public class EnumDisplayAttribute : Attribute { public E ...
  • BitBlt 該函數對指定的源設備環境區域中的像素進行位塊(bit_block)轉換,以傳送到目標設備環境。 BitBlt 該函數對指定的源設備環境區域中的像素進行位塊(bit_block)轉換,以傳送到目標設備環境。 函數原型 [DllImport("gdi32.dll")] public sta ...
  • 1、"~/x/xx.aspx?id=" + id string id=Request.Params["id"].ToString(); 2、Response.Redirect("x.aspx?id=1&flag=true") bool flag=Request.QueryString["flag"] ...
  • 本文 所用的 資源 下載地址 http://pan.baidu.com/s/1jHTRiU6 使用文檔要可以在 菜鳥學校 查看(也包括下載地址) http://www.runoob.com/memcached/window-install-memcached.html 下載與自己系統對應的版本解壓, ...
  • 前言: 1.這個隨筆實現了一個Ajax動態載入的例子。 2.使用.net 的MVC框架實現。 3.這個例子重點在前後臺交互,其它略寫。 開始: 1.控制器ActionResult代碼(用於顯示頁面) 2.前臺頁面主要代碼 說明:這個就是要展示數據的表格,裡面的欄位要和你建好的模型匹配。 <table ...
  • 最近,項目上涉及到了圖像壓縮,發現原有的圖像壓縮功能,雖然保證了圖像的大小300K以內,但是壓縮後的圖像看的不在清晰,並且,限定了圖片的Height或者是Width。 在CSDN上看到了一個壓縮演算法:http://blog.csdn.net/qq_16542775/article/details/5 ...
  • 基於TcpListener、HttpLister的簡單web server搭建及基礎認知 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...