[.NET Core] EFCore Generate DbModel

使用 EFCore 的時候沒有看有地方可以像 .NET Framework 可以直接使用 VS 新增 edmx 產生好資料庫的 Model 與 DbContext,這個時候就必須靠自己拉,不過當 Table 多的時候這樣人工慢慢新增 Model 有點智障,於是乎就上網找到了 EFCore Tool 有提供一段命令可以使用。

網址:https://docs.microsoft.com/zh-tw/ef/core/miscellaneous/cli/powershell

這裡就來簡單做個筆記

  1. 首先在 Package Manager Console 輸入指令安裝 EFCore Tool
Install-Package Microsoft.EntityFrameworkCore.Tools
  1. 若為 Win7 需要先裝 Windows Management Framework 3.0 否則會跟我一樣出現下面的錯誤
    錯誤畫面

  2. 檔案可以在 這裡 找到下載安裝並重開機。

  3. 產生 Model 前需注意一件事情就是密碼不能有 $ 符號,不然會跟我一樣鬼打牆一小時都找不到問題,我有嘗試使用單引號包起來,但依然無法成功連線

  4. 接著在 Package Manager Console 輸入指令 (適用於 Azure SQL DataBase)

Scaffold-DbContext "Server={ip};Initial Catalog={dbName};Persist Security Info=False;User ID={Account};Password={Password};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir {Path}
  1. 接著就可以看到 VS 裡面跑出 DbModel 與 DbContext 囉 !!
       

[C#][Visual Studio 2017] 修改預設 class 存取範圍成 public

版本:Visual Studio 2017 Enterprise

路徑:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1028\Class\Class.cs

 

範本:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    public class $safeitemrootname$
    {
    }
}

 

這樣就新增 class 時就會自己加上 public 囉

       

[SideProject] Gif 產生器

動機

原作者是 ruby 寫的 sorry

感覺頗有趣的就寫個 .NET 版來玩玩了

由於很懶所以沒有優化歡迎PR

專案說明

本專案是用 Visual Studio 2017 開發

基本上只要裝了微軟爸爸的 VS 後直接 F5 就可以執行了

若有問題歡迎發 Issues

連結

GitHub:https://github.com/shuangrain/SorryNet

Blog:https://blog.exfast.me/2018/03/side-project-gif-generator/

Demo:https://exfast-sorry.azurewebsites.net/

       

[SideProject] 財政部電子發票 API 測試工具

財政部電子發票 API 測試工具

這是我最近在串接財政部 API 時自己寫的測試工具,希望能讓大家在串接測試上更加方便。
歡迎 PR 財政部的 API 清單

操作說明

  • 環境變數
  1. 簽章 (Signature):將 Request 參數按照名稱排序並以 HMAC-SHA1 加密後加在 Query 後方傳送至財政部
  2. 測試環境:將資料傳送至財政部測試環境
  3. Client 模式:以另開新頁的方式呼叫財政部 API
  • 選擇 Api
    要測試的 API

  • 財政部加密用 Key
    財政部提供的 HMAC-SHA1 加密用 AppKey

  • Api 位置
    呼叫的 API 位置

  • Request
    傳送給財政部的資料

使用方法

  1. 開啟 /src/appsettings.json
  2. 將財政部提供的 AppKeyAppID 填上去
  3. 用 Visual Studio 2017 開啟並執行即可 !!

Api 新增

開啟 /src/Json/ApiList.json 且依照下面的參數新增 Api

參數介紹

參數名稱 參數說明
TypeName Api 類型 (依此欄位排序)
ApiName Api 名稱
ApiUrl Api 位置
Param Api 需傳送的參數範本 (參數 timeStamp, expTimeStamp, uuid, appID 會被自動取代)
       

[Linux] 在 Ubuntu 上安裝 Jenkins CI Server 來 Bulid NetCore 2.0

近期都在研究 NetCore 但如果要上 Linux 的話就變成每次都要下指令重建專案 ,剛好有看到 Jenkins 支援 NetCore 且可以省去我在 SSH 上自己下指令的動作,於是乎就跑去研究了一下這塊,這邊留個筆記方便日後查閱。

Jenkins 安裝

  1. 下載套件清單 (否則搜尋不到)
    wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt-get update
  2. 安裝 Jenkins
    sudo apt-get install jenkins
  3. 接著輸入 http://localhost:8080 並在 /var/lib/jenkins/secrets/initialAdminPassword 找到的你管理員密碼
  4. 這邊可以選擇要安裝社群建議的套件還是自訂套件,因為我是第一次安裝所以先選擇左邊

  5. 安裝完後會要求你設定管理員帳號密碼,設定完後就安裝完畢囉 !!

  6. 接著從左邊選單點選 管理 Jenkins -> 設定全域安全性
  7. 確認 Allow anonymous read access 是沒有打勾的,否則大家都可以亂搞囉
       

[Linux][MySQL][phpMyAdmin] 預設語系修改為 utf8

因為Mysql是瑞典人開發的所以預設語系是Latin1,如果想把他修改為utf8的話可以參考以下設定

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[mysql]
default-character-set=utf8
init-connect='SET NAMES utf8'  
character-set-server = utf8 

[client] 
default-character-set=utf8

phpmyadmin可以在config.inc.php新增一行

/* 預設語系 */
$cfg['DefaultCharset'] = 'utf8';
       

[C#][LeetCode][Easy] 657. Judge Route Circle

心得:

控制機器人走路,且最後必須回到起點,把它當作XY軸來理解的話很快就可以解答。
右 X + 1, 左 X – 1, 上 Y + 1, 下 Y – 1,最後 X 與 Y 皆為0則回傳true

問題:

Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this robot makes a circle, which means it moves back to the original place.

The move sequence is represented by a string. And each move is represent by a character. The valid robot moves are R (Right), L (Left), U (Up) and D (down). The output should be true or false representing whether the robot makes a circle.

Example 1:

Input: "UD"
Output: true

Example 2:

Input: "LL"
Output: false

答案:

public class Solution {
    public bool JudgeCircle(string moves) {
        int x = 0;
        int y = 0;

        foreach (var item in moves)
        {
            switch (item)
            {
                case 'U':
                    {
                        y++;
                        break;
                    }
                case 'D':
                    {
                        y--;
                        break;
                    }
                case 'R':
                    {
                        x++;
                        break;
                    }
                case 'L':
                    {
                        x--;
                        break;
                    }
            }
        }

        return (x == 0 && y == 0);
    }
}

答案 – Linq:

public class Solution {
    public bool JudgeCircle(string moves) {
        int x = moves.Where(p => p == 'U' || p == 'D').Sum(p => (p == 'U') ? 1 : -1);
        int y = moves.Where(p => p == 'R' || p == 'L').Sum(p => (p == 'R') ? 1 : -1);
        return x == 0 && y == 0;
    }
}

 

       

[MySQL][LeetCode][Easy] 595. Big Countries

心得:

這題只要找出領土大於三百萬或是人口大於兩百五十萬的的資料即可

問題:

There is a table World

+-----------------+------------+------------+--------------+---------------+
| name            | continent  | area       | population   | gdp           |
+-----------------+------------+------------+--------------+---------------+
| Afghanistan     | Asia       | 652230     | 25500100     | 20343000      |
| Albania         | Europe     | 28748      | 2831741      | 12960000      |
| Algeria         | Africa     | 2381741    | 37100000     | 188681000     |
| Andorra         | Europe     | 468        | 78115        | 3712000       |
| Angola          | Africa     | 1246700    | 20609294     | 100990000     |
+-----------------+------------+------------+--------------+---------------+

A country is big if it has an area of bigger than 3 million square km or a population of more than 25 million.

Write a SQL solution to output big countries’ name, population and area.

For example, according to the above table, we should output:

+--------------+-------------+--------------+
| name         | population  | area         |
+--------------+-------------+--------------+
| Afghanistan  | 25500100    | 652230       |
| Algeria      | 37100000    | 2381741      |
+--------------+-------------+--------------+

答案:

# Write your MySQL query statement below
SELECT
    name,
    population,
    area
FROM
    World
WHERE
    area > 3000000
OR
    population > 25000000

 

       

[C#][ASP.NET WebAPI] 回傳 JSON 時忽略 null 欄位

當回傳JSON格式時通常都會直接傳送model,但又不是每個欄位都有用到就有會空值的欄位出現,這時想要將null的欄位隱藏就可以用這招啦。

 

在WebApiConfig.cs中的Register方法加入以下程式碼:

//回傳時忽略null欄位
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
};