EFCoreのオプティミスティック同時実行制御を有効にするために、rowversionを追加する
前提条件
EFCoreのオプティミスティック同時実行制御を有効にするために、テーブルにrowversionが必要になる。
DB Firstでの業の場合、スキャフォールドでのリバースエンジニアリングが必要になる。
今回やりたいこと
Not NullなRevision カラムをAlter Tableにて追加を行う。
SQL Command(rowversionを後から追加したい場合はこちらのcommand)
ALTER TABLE [ tableName ] ADD Revision rowversion NOT NULL;
EDMとDbContextのリバースエンジニアリング
Revision カラムを追加した状態でScaffold-DbContext commandを実行すること
SQLServerのContainer Imageを更新する
特にCIを回している場合は、同期が必要なため注意すること
SQLServerのContainerを起動を待機するgithub Actionsを書く
CIを回す際に永続化レイヤーが欲しくなる問題
業務アプリケーションのServiceやエンドポイントを開発していると、Testの実行時に実際の永続化レイヤーへの接続が欲しくなる。
name: .NET CI
on:
pull_request:
jobs:
build:
runs-on: ubuntu-latest
services:
mssql-kashilog:
image: ghcr.io/creatiovitae/kashilogdb:2023-11.14
ports:
- 1433/tcp
- 1433:1433
options: >-
--health-cmd "/opt/mssql-tools/bin/sqlcmd -U SA -P h0geFuga -Q 'select 1' -b -o /dev/null"
--health-interval 60s
--health-timeout 30s
--health-start-period 20s
--health-retries 3
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: '8.0.x'
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore
- name: Test
run: dotnet test --no-restore --verbosity normal
env:
TEST_ENVIRONMENT: Ci
ポイント
Container Imageは例によってghcr.io/creatiovitae/kashilogdbを利用する。Portsに1433/tcpを設定するhealth-cmdに"/opt/mssql-tools/bin/sqlcmd -U SA -P h0geFuga -Q 'select 1' -b -o /dev/null"を設定する。今回はCi用の漏れても特に影響のない情報なのでId/passwordを決め打ちにしているが、用途によってはsecretを挿すようにしたほうがいいかもしれない。
外向きの静的 IP アドレスを設定しない状態で、.NET8でHttpRequestを送るための改善を行いたい
前提条件
発生する現象
System.Net.NetworkInformation.NetworkInformationException (13): Permission denied
が発生する時がある。(起きない時もある。)
対処方法
- HTTP/3( Alt-Svc 処理)を無効にする
DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORTをfalseに設定する。AppContext.SetSwitchで、System.Net.SocketsHttpHandler.Http3Supportを設定する。
関連Issue
RouteHandlerAnalyzer が InvalidOperationException をスローする に対する対処を行う
事前条件
.NET8 projectである
現象
Analyzerの警告でタイトルのエラーが出力される。
対処方法
<PropertyGroup> <NoWarn>$(NoWarn);AD0001</NoWarn> </PropertyGroup>
を、設定する。
関連Issue
github の Container RegistryにimageのPushを行う
github の Container RegistryにimageのPushを行い、Pullを行う
事前条件
環境変数:CR_PAT にpersonal access tokenを設定して、docker loginが済であること
イメージをpushする(kashilogdbをsampleに使う。)
docker tag kashilogdb ghcr.io/creatiovitae/kashilogdb:2023-11.14
docker push ghcr.io/creatiovitae/kashilogdb:2023-11.14

イメージをpullする(kashilogdbをsampleに使う。)
docker pull ghcr.io/creatiovitae/kashilogdb:2023-11.14
docker run --name kashilogdb -d -p 15331:1433 ghcr.io/creatiovitae/kashilogdb:2023-11.14
WindowsでgithubのContainer Registryにログインする
事前条件
Windows のpower shellでの場合を記述している。
prompt等の場合、環境変数の設定は、set キーワードを利用するため、注意すること。
personal access token(classic)を作成する
開発者設定から作成を行う。
power shellで操作を行う
環境変数を設定する
$Env:CR_PAT = "<personal access token>"
<personal access token> には、作成した personal access token(classic)を設定すること
docker login ghcr.io を発行する
echo $Env:CR_PAT | docker login ghcr.io -u username --password-stdin
usernameはgithubのユーザー名を設定すること。
この時環境変数がうまく設定できていない場合、
Error: Cannot perform an interactive login from a non TTY device
というerrorが発生する。
githubの開発者設定を開く
githubの開発者設定を開く業をよく忘れるのでメモっていく
事前条件
github.comにログイン状態であること github.com
SettingからDeveloper Settingsを開く
〇settingsは以下 github.com
〇Developer Settingsは以下 github.com
開発者設定 is 何
github アプリを開発したい場合や、Apiを利用したい場合のTokenの登録を行う際にお世話になる。
大多数の人はTokenの登録業を行うことになる。