.NET

EFCoreのオプティミスティック同時実行制御を有効にするために、rowversionを追加する

前提条件 EFCoreのオプティミスティック同時実行制御を有効にするために、テーブルにrowversionが必要になる。 DB Firstでの業の場合、スキャフォールドでのリバースエンジニアリングが必要になる。 今回やりたいこと Not NullなRevision カラムをAlter Tabl…

SQLServerのContainerを起動を待機するgithub Actionsを書く

CIを回す際に永続化レイヤーが欲しくなる問題 業務アプリケーションのServiceやエンドポイントを開発していると、Testの実行時に実際の永続化レイヤーへの接続が欲しくなる。 github.com name: .NET CI on: pull_request: jobs: build: runs-on: ubuntu-late…

RouteHandlerAnalyzer が InvalidOperationException をスローする に対する対処を行う

事前条件 .NET8 projectである 現象 Analyzerの警告でタイトルのエラーが出力される。 対処方法 <PropertyGroup> <NoWarn>$(NoWarn);AD0001</NoWarn> </PropertyGroup> を、設定する。 関連Issue github.com

Settings/OptionValuesを環境変数 / Secretへ登録する判断ポイントを考える

Settings/OptionValuesを設定ファイルに含めるかどうか、環境変数で直接挿すか、Secret経由で環境変数を挿すか問題 Settings/OptionValuesを設定ファイルに含めるかどうか 設定ファイルに含めるかどうかは、最悪漏れた時に個人情報漏洩等も含めたセキュリテ…

IReadOnlyDictionary<TKey, TValue>. GetValueOrDefault(...)の中身を見てみる

IReadOnlyDictionary<TKey, TValue>. GetValueOrDefaultと、.TryGetValue、どちらが良いのかわからなかったのでコードを見てみる github.com 拡張メソッドなので、最初にArgumentNullException.ThrowIfNullでのnull検査が入っているものの、基本的には.TryGetValueのwrapの</tkey,>…

NU1605を対処する

NU1605がBuild時に上手くいかないケースがある 自分が遭遇した現象 ローカルでのBuild(VisualStudio2022)ではBuildはPass。 ローカルでのBuild(dotnet build)ではBuildはPass。 Cloud BuildでのCI時のBuildはPass Cloud Runへのdeploy時のBuildはError …

Null許容参照型について復習を兼ねてまとめた Part1

github.com 基本的に勉強会で得た知識を自分なりに纏めているので、欠落はありそう……。

パターンマッチングについて復習も兼ねてまとめた

github.com まだ、書くことたくさんあるけど、とりあえず中締め。

using Iterator Block(まとめと復習)

書いた github.com

visualstudio.gitignoreと付き合う

.gitignoreを自動生成したいだけの人生だった VS2017時代はソリューション作成時に「新しい Git リポジトリの作成」というPropがありました。 有効にすると、[ソリューションの作成], [git リポジトリの作成], [Visual Studio用 .gitignoreの生成]まで全部や…

Property違いの同じ型を複数DI設定してみる。 その1

Propertyの違う、同一Objectを複数DI設定したいだけの人生だった IEnumerableでInjectionする DIでper RequestでInjectionしてほしいクラス public class PiyoService { public string TagName { get; } public PiyoService(string tagName) { TagName = tag…

ASP.NET CoreでProgram.csを見たり、Serverヘッダー:Kestrelをオフにしてみる

Program.cs周りのコードを確認してみる。 ASP.NET Core の2.2時代のテンプレートは、WebHost(IWebHostBuilder)が使用されていました。 コードベースはこんな感じ。 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDef…

Microsoft.AspNetCore.Appメタパッケージを利用してライブラリーを作成する際のProject Sdkについて見てみる

Microsoft.AspNetCore.Appメタパッケージを使いたい Webゾーンに関わるライブラリーを書く場合、Microsoft.AspNetCore.Appメタパッケージを参照したくなります。 .NET Coreの.csprojを編集するときに、Project SdkをMicrosoft.NET.Sdk.Webに設定するとDefaul…

Null合体演算子とNull条件演算子と戯れてみる。

C#6.0で追加されたNull条件演算子、便利ですよね。 今回はNull合体演算子と共に戯れてみます。例)hogeが、Nullである場合は、string.Empty、そうでない場合はTrim処理を行う。 @Null合体演算子を使う場合 // string.EmptyにもTrim処理がかかって、うざい。…

ASP.NET WebApiでSwaggerを使ってみる。

導入方法 NugetでSwashbuckleを追加します。Nugetでの導入後、SwaggerConfigが作られているため、XMLドキュメントコメントを参照するように変更を加えます。下記コードがコメントアウトされているので、コメントアウトを解除します。 c.IncludeXmlComments(G…

URLReWriteを使って、リダイレクトを設定する。

Webサイト/アプリを運営していると、ページの評価の統一をしたい等の理由で、リダイレクトを設定したいケースはままあるかと思います。 その際、C#等のプロダクトコードでリダイレクトかけるのは少々面倒なので、IISのURLReWriteにて、設定をしてしまいます…

日付/時間の検証属性を作成してみる

アノテーション検証で、単項目バリデーションを完結させたい場合、アノテーションを作成したくなるケースがあります。 今回は、日付時刻のアノテーション検証と、時間のアノテーション検証を作成してみましょう。まずは日付時刻のアノテーション検証から作成…

WebApiの結果をアプリ側でJsonに限定する

ASP.NET WebAPIで作成したWebメソッドの返却値は、リクエストヘッダーのAcceptを指定してスイッチ出来ますが、 そもそもJson形式でしか運用しない場合には、Global.asax.csに以下のコードを追加することで限定可能です。 GlobalConfiguration.Configuration.…

ルーティングでトレイリングスラッシュを付与したり、小文字にしたりしてみる。

難しいことは特にありません。 RouteCollectionクラスに、プロパティを持っているので、いつものRouteConfig内で、プロパティを変更してあげるだけです。 public static void RegisterRoutes(RouteCollection routes) { routes.LowercaseUrls = true; routes…

Divに、HTMLヘルパーでリンク付与してみる。

結果から言うと、出来てません。←ASP.NET MVCで、リンクを作成するときは、HtmlヘルパーのActionLinkか、RouteLinkの拡張メソッドを通常使うと思いますが、 Webアプリを作っていると、通常のテキストでのリンクではなく、Divのブロック単位でリンクを張りた…

リンクをHtmlヘルパーで作成してみる

ASP.NET MVCで、リンクを作成するときは、HtmlヘルパーのActionLinkか、RouteLinkの拡張メソッドを通常使うと思います。 Route設定があるなら、RouteLink、ないならActionLinkという住み分けでしょうか。 パフォーマンス的にはRouteLinkが推奨のようなので、…

FizzBuzz書いてみよう

知り合いとFizzBuzz書いてみようという話になりました。@仕様 1から順番に数をコマンドプロンプトに表示する。 その数が3で割り切れるなら"Fizz" 5で割り切れるなら"Buzz" 両方で割り切れるなら"FizzBuzz"と表示する。@引数 [0]=終端の値言語はいつもの通りC…

OracleのBlob型データカラムを対象に、データ取得・データ更新を行う。

Oracleを扱う機会があったので、ポストします。 OracleのBlob型のデータカラムを、C#側からアップデートしようとした際に、エラーが発生する場合がありました。 アップデートが行われる場合もあれば、行われない場合もある、といった具合です。エラー内容は[…

Azure Webサイトでサイトを作って、Webデプロイしてみる。

MicrosoftAzure、仕事では、Iaas、Paas共に、微妙に触っていたのですが、プライベートで触る機会があったので、軽くまとめてみます。 そもそも、Azureって? クラウドプラットフォーム、と言われるものです。 AWS等が競合ということになります。 AWSでも、Ia…

DomainModelとか、ViewModelとかのお話

ASP.NET MVCでWebアプリを作っているときに、いつも迷うのが、Model配下のオブジェクト定義です。DomainModelは大体、Models配下にDtoフォルダを作成して配置しています。 SQLのスクリプトは、Models配下にSqlフォルダを作成して配置しています。 コード上で…

AutoMapperの設定と実行をしてみよう

AutoMapperとはなんぞや、というのは、前に書いたので、今度は設定と使用について書いていきましょう。まずは、設定を行う必要があります。 設定は、ASP.NET MVC(c#)で利用する場合、アプリケーションスタート時に一度、呼び出すだけでOKです。(セッション…

ASP.NET MVCについて

他人に説明する時に、どうにもうまく言語化できないので、ここにまとめてみます。 そもそもASP.NETってなんぞ? 概念はWikipediaさんでも見てもらうとして、これまでASP.NETと表現していたフレームワークは、ASP.NET WebFormsを指し示すことが多かったはずで…

Dapperを使って、PostgreSQLの接続クラスを作ってみる

Dapperを使って、PostgreSQLの接続クラスを作ってみます。まずはDapperの導入から。 といってもNugetから導入するだけです。簡単。 次に、インポート設定 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Npg…

AutoMapper

前回書いたことと若干リンクする話ではありますが、Linqが登場してからは、.NETの世界でもデータをオブジェクト単位で扱うことが多くなりました。 そんな中、オブジェクトを詰めなおしたいという要求が出てくることが結構あります。 本格的なドメイン駆動開…

MicroORM

.NET開発というと、初期の頃は、データの取り扱いにDataTableとかDataSetとかを使っておりました。 Linqが登場してからは、データをオブジェクト型で取り扱うことが多くなりました。 (Linq使うようになると、オブジェクト型じゃないと、どうにも立ち行かな…