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の登録業を行うことになる。