#author("2021-12-08T05:25:17+00:00","default:admin","admin") #author("2021-12-08T05:26:41+00:00","default:admin","admin") -[[ASP.NET Core アプリでのデータの操作:https://docs.microsoft.com/ja-jp/dotnet/architecture/modern-web-apps-azure/work-with-data-in-asp-net-core-apps]] -[[CQRS マイクロサービスに読み取り/クエリを実装する:https://docs.microsoft.com/ja-jp/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/cqrs-microservice-reads]] -[[.NET Coreで幾つかのデータベースアクセスを試してみる(SQL Server編):http://qiita.com/zaburo/items/0a215f4d9fad0aa0b8ef]] -[[【ASP.NET Core入門記】データファーストでScaffoldする【MVC】:https://qiita.com/logikuma/items/a705e0d39bbe69550608]] -[[Blazor でMariaDB データにリアルタイムで連携するアプリを構築:http://www.cdata.com/jp/kb/tech/mariadb-ado-blazor.rst]] -[[ASP.NET Core(Dapper)でMySQLを使う:https://qiita.com/zaburo/items/239612ab632bcb5ab18c]] -[[Blazor でMariaDB データにリアルタイムで連携するアプリを構築:https://www.cdata.com/jp/kb/tech/mariadb-ado-blazor.rst]] *アクセス方法 [#pf188336] -ADO.NET .... 最も低レベルなAPIですが、高速 -Entity Framework ... いわゆるO/Rマッパで、高レベルなAPIだが、相対的に遅い -Dapper ... Micro ORMと言われる部類のもので、中レベルなAPIだが、比較的高速(ADOに近い) **速度比較 [#d5e97a38] -[[Entity Framework Core 2.0 vs. Dapper performance benchmark, querying SQL Azure tables:https://koukia.ca/entity-framework-core-2-0-vs-dapper-net-performance-benchmark-querying-sql-azure-tables-7696e8e3ed28]] -[[Entity Framework Core 2.0 vs. Dapper performance benchmark, querying SQL Azure tables:https://www.reddit.com/r/csharp/comments/6yhp84/entity_framework_core_20_vs_dapper_performance/]] -[[Is Entity Framework Core 2.0 Faster?:https://dev.to/rickab10/is-entity-framework-core-20-faster]] *[[Dapper:https://github.com/StackExchange/Dapper]] [#m3017d4d] -[[Dapper Tutorials & Examples - C# Micro ORM:http://dapper-tutorial.net/]] <== まずはこれをしっかり読むこと -[[C# Dapper tutorial:https://zetcode.com/csharp/dapper/]] -[[Dapper With .Net Core:http://todothinkofname.net/2016/05/30/Dapper-with-Net-core/]] -[[Use Dapper ORM With ASP.NET Core:http://www.talkingdotnet.com/use-dapper-orm-with-asp-net-core/]] -[[【C#】Dapperについてまとめてみた:http://sweets-junkie.hatenablog.com/entry/2014/03/07/010004]] -[[Dapperを触ってみた(導入、簡単な操作編)(Micro-ORM):http://j-levia.hatenablog.jp/entry/2017/04/17/213921]] -[[DapperのQueryを使ってマルチマッピングしてみる:http://qiita.com/NetSeed/items/dda1096d03dfbf5fe431]] -[[ASP.NET Core + Dapper で高パフォーマンスWEB開発を実践する:http://kikki.hatenablog.com/entry/2016/10/26/100604]] -[[データ ポイント - Dapper、Entity Framework、およびハイブリッド アプリ:https://msdn.microsoft.com/ja-jp/magazine/mt703432.aspx]] -[[Dapper - マイクロソフト系技術情報Wiki:https://techinfoofmicrosofttech.osscons.jp:443/index.php?Dapper]] -[[Dapper .NET Tutorial:https://liangwu.wordpress.com/2012/08/16/dapper-net-samples/]] -[[macでASP.NET MVC CoreとDapperを使ったウェブアプリを作る手順:https://blog.areare.net/archives/12988]] -[[Dapperを理解する際に役立ったまとめ:https://qiita.com/araiman/items/36c3034464e42704bb21]] -[[【Dapper】公式サイトのチュートリアルを翻訳・まとめ:https://qiita.com/yut-nagase/items/863248e89b9b178b0ca3]] **PostgreSQL [#s3401ceb] -[[Dapper.Extensions.PostgreSql:https://www.nuget.org/packages/Dapper.Extensions.PostgreSQL/]] -[[Dapper With MySQL/PostgreSQL On .NET Core:https://dotnetcoretutorials.com/2020/07/11/dapper-with-mysql-postgresql-on-net-core/]] -[[PostgreSQLとDapper ORMでパラメータに配列を渡す方法:https://www.exceedsystem.net/2021/03/18/how-to-pass-array-as-parameter-with-dapper-with-postgresql/]] -[[Getting Started With PostgreSQL Using Dapper In .NET Core:https://www.c-sharpcorner.com/article/getting-started-with-postgresql-using-dapper-in-net-core/]] -[[PostgreSQL and Dapper in .Net Core:https://dotnetcorecentral.com/blog/postgresql-and-dapper-in-net-core/]] **nvarchar(4000) [#ic2cc854] -[[sql-server - sp_executesqlのパラメータが遅い:https://kotaeta.com/54023465]] -[[c# gridreader - Dapper.NET:varchar(4000)のデフォルト:https://code-examples.net/ja/q/1cb20cc]] -[[Be careful with varchars in Dapper!:https://lowleveldesign.org/2013/05/16/be-careful-with-varchars-in-dapper/]] **SetSnakeToPascal() [#h6491433] -[[neue cc - Dapper関連:http://neue.cc/?s=Dapper]] --[[neue cc - Micro-ORMとC#(とDapperカスタマイズ):http://neue.cc/2012/12/11_390.html]] --[[neue cc - C#のO/Rマッパーのパフォーマンス測定 Part2:http://neue.cc/2012/01/17_363.html]] -[[How to get Dapper to ignore/remove underscores in field names when mapping?:https://stackoverflow.com/questions/34533349/how-to-get-dapper-to-ignore-remove-underscores-in-field-names-when-mapping]] ... パフォーマンスに影響大 **[[Dapper Plus:https://dapper-plus.net/]] [#yf42332a] -[[価格:https://dapper-plus.net/pricing]] -Bulk Insert -Bulk Update -Bulk Delete -Bulk Merge **Dapper.Extensions.Linq [#m577dd86] -[[Dapper.Extensions.Linq:https://github.com/ryanwatson/Dapper.Extensions.Linq]] -[[Dapper.Extensions.Linq/Dapper.Extensions.Linq.Test/:https://github.com/ryanwatson/Dapper.Extensions.Linq/tree/master/Dapper.Extensions.Linq.Test]] ---[[https://github.com/ryanwatson/Dapper.Extensions.Linq/blob/master/Dapper.Extensions.Linq.Test/Configuration/Container.cs]] -[[Castle Windsor:http://d.hatena.ne.jp/Kazzz/20071020/p1]] **[[Linq2Dapper:https://github.com/brentmannering/linq-to-dapper]] [#afd9e7d3] **Tips [#w0f0ed07] ***like 検索 [#f168345e] -[[Does Dapper support the like operator?:https://stackoverflow.com/questions/6030099/does-dapper-support-the-like-operator]] -普通にプリペアードステートメントで値をセットしようとするとできないので、SQL文にCONCAT関数を使う string query = "SELECT * from country WHERE Name LIKE CONCAT('%',@name,'%');" var results = connection.query<country>(query, new {name}); ***IN句 [#t2e8743d] -[[DapperはIN句も自動でマップしてくれるのが便利:http://kiyokura.hateblo.jp/entry/2013/12/03/084248]] ***マルチマッピング [#o00bce71] -[[DapperのQueryを使ってマルチマッピングしてみる:https://qiita.com/NetSeed/items/dda1096d03dfbf5fe431]] -[[DapperのQueryMutilpeを使って結合テーブルの分割マッピングをしてみる:https://qiita.com/NetSeed/items/7e0e25757080e0259416]] ***実行時間タイムアウト [#lac4ee69] -defaultは 30 秒 -指定したい場合は、以下のように Query(), Execute()で commandTimeout パラメタを設定 dbConnection.Query<TransactionLog>(sQuery, commandTimeout: 180); **[[Dapper Plus:http://dapper-plus.net]] [#ib837496] -有料ツール *[[Entity Framework Core:https://docs.microsoft.com/en-us/ef/core/]] [#eae352fb] -[[Entity Framework Core - IncludeとThenIncludeを試す:http://ichiroku11.hatenablog.jp/entry/2017/10/28/222855]] -[[Entity Framework で複合主キーを設定する方法と Find の使い方:http://oki2a24.com/2016/07/13/use-composite-keys-and-find-method-in-entity-framework/]] -[[Entity Framework Core 2.0の新機能:https://www.infoq.com/jp/news/2017/09/EF-Core-2.0-2]] -[[Entity Framework Core 1.0 の基本的な使い方:https://blogs.msdn.microsoft.com/nakama/2016/07/07/aspnetcore10-part2/]] -[[新しく生まれ変わったデータ アクセス テクノロジ ~Entity Framework Core 1.0 の全貌~:https://docs.com/decode2016/9570/dev-003-entity-framework-core-1-0]] -[[「Entity Framework Coreを使ってみる」 公開用:https://www.slideshare.net/esmsec/entity-framework-core]] -[[Entity Framework Core 1.0 で SQLite を使ってみる:http://gooner.hateblo.jp/entry/2016/03/04/071400]] -[[データ ポイント - EF Core 1.1: お気に入りをいくつか:https://msdn.microsoft.com/ja-jp/magazine/mt745093.aspx]] -[[.NET Core(Entity Framework Core)でCode Firstする:http://ryuichi111std.hatenablog.com/entry/2016/11/08/023809]] -従来の Entity Framework と異なり、EF Core では O/R マッパーファイル(*.dbml)を使うことができない -このため、O/R マッピング(データベーステーブルのどこを構造体クラスのどこにマッピングするのか?)はすべてコードで指定する必要がある -ツールを利用して自動生成させることも(ある程度は)可能ですが、現時点(2016/07/02)では、手で書いてしまったほうがやりやすい ***Code First [#qc92d1d8] -今後はこれが主流 -ソフトウェアを開発するにあたり、「リレーショナルデータベース設計ありき」ではなくて「作成するソフトウェアの”ドメイン領域の分析”に注力し、データベースはモデルのあるタイミングにおけるシリアライズ結果を保存する入れ物」的な考え方が基本となっている -リレーショナルデータベースとドメインオブジェクトは、その概念の相違から「インピーダンス・ミスマッチ」が発生することは必然であり、ソフトウェア側の人間としては、ドメイン領域のオブジェクトモデリングに集中すべき、という思想 ***Database First [#r9775169] ***Model First [#h8e57f6f] ***使い方 [#rf17b83d] -以下のNuGetパッケージをインストール(DBにSQLiteを使う場合) $ dotnet add package Microsoft.EntityFrameworkCore $ dotnet add package Microsoft.EntityFrameworkCore.Tools $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite $ dotnet add package Microsoft.EntityFrameworkCore.Sqlite.Design -[プロジェクト名].csproj に以下を追記 &color(red){<= これをやらないと「dotnet ef」コマンドが使えない}; <ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> </ItemGroup> -プロジェクトフォルダにて以下を実行 $ dotnet restore -DBスキーマ構築・更新 $ dotnet ef migrations add Initial $ dotnet ef database update --上記「Initial」の記述は何でもよい *エラー対応 [#n1da3030] -[[SqlCommand.CommandTimeout プロパティ:https://docs.microsoft.com/ja-jp/dotnet/api/system.data.sqlclient.sqlcommand.commandtimeout?redirectedfrom=MSDN&view=dotnet-plat-ext-5.0#System_Data_SqlClient_SqlCommand_CommandTimeout]] **SqlException: Timeout expired. [#l5df8df7] -[[ASP.NET で SQLのコマンドがタイムアウトした場合の対応方法:https://qiita.com/c-nuts/items/93d0ff46c58c911b93f8]] --web.configのconnectionString属性にConnection Timeout=180;を追記 --web.configのhttpRuntimeにexecutionTimeout属性を追加し180秒に設定 --ソースコードの中でコマンドのタイムアウト時間を180秒に設定