.Net Core / Net ASP Core [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
おらの群馬さにはIISなんてねえもんでりなっくすさ使ってしぃしゃーぷさ動かすべえな こんなの動くなんておったまげえな時代だわな んだいくべえ >>357 EntityFramework Core2.0のことを言ってるんなら使えるよ >>358 わー、さっそくレス頂きありがとうございます そうです。 EntityFramework Core2.0 のことです。 パッケージ導入して、環境を準備して、 やってみたいと思います。 EntityFramework Core2.0では、規約がものをいうので、日本語のテーブル名、列名を使っているデータベースでも大丈夫なのか不安なのでした。 ハローワールドは成功したので、dbcontext、エンティティ、そしてテストコードを書くところです。 EntityFramework Core2.0って、コードファーストや、データベースファーストを推してくるんですが、そういう自動生成機能って、使わないで、自分で両方の定義をしてもいいのですよね。 皆さんはどういう風にしているのだろうか。 >>360 日本語のテーブル名とか、列名つかってなかったの? 英語の複数形をテーブル名にしてたとか、ルールを意識して構築してたのかな。 >>362 日本語なんて使うわけないけど、何をそんなに心配してんの? >>362 まさか複数形じゃないとテーブル名として使えないとでも思ってる? >>363 sql server 7.0の頃から構築したテーブルで、 日本語のテーブル名と列名が使われているんだよ。 そのままスキャフォールディングするのも心配。 日本語のクラス名とかプロパティーなんて見たくないし。 >>364 いや、規約から外れていると何か不具合が発生しそうで。 >>368 水色の.net coreの参考書しか読んだことない。 あと、薄紫色のASP.NET MVCの書籍とか。 ドキュメントなんかあるんか? >>367 View? htmlを描画するやつのことではないと思うけど。 sqlのviewだと思うが、書き込みは普通にテーブル使うしか無い どうしても避けたいのならWebAPIでも使うのが最善かも DBがインストールされたサーバー内だけなら日本語テーブル名問題は起こらないだろうから その後を全部英文字にすればトラブルフリーに出来るかもしれん >>375 うん、でも嫌いではないんだけどね、多分、カバーで隠して読むだろうね >>376 電子書籍だからカバーもクソもないと思うが ASP.NET MVC の 知識ってほとんどそのまま、.net core MVC で通用すると考えていいのかな? スキャホールディングしなくても、それが出力するようなコードを、 モデルと、DbContextに自分で全部書き起こせば、 データベーステーブルでテーブルの結合したやつでも得られるんだろうか。 データベースでリレーションの設定をしていないので、スキャホールディングでテーブル結合反映されないため、 自分でコードを記述しようと思っているんです。 データベース側は既存のプログラムとの連携が壊れたら困るのでいじりたくありません。。 業務系は複雑怪奇なレガシーDBの呪縛があるからEFとの相性が最悪 SQLを手で書いてDapperでマップするのが正解だよ >>385 壊してもいいデータベースで開発してから、 それを本番のデータベースで運用する予定 >>384 Dapperについて調べてみます。 ストアドプロシジャとパラメーターがつかえたらいいんだけどなあ >>386 ストアドプロシージャとパラメーター使えるよ Dapperでは、SQLやストアドプロシジャの結果行に対応したモデルクラスに、 マッピングできるのだとわかってきました。 自分のところのストアドプロシジャでは、テーブルにはない新しい列が登場したり、列の名称が付替られたりするので、 ストアドプロシジャの結果行に対応した専用のクラスをいちいち作成しようと思いました。 ストアドプロシジャでは最終的に、SELECT文で出力したい列が列挙されています。 対応するクラスのプロパティー名(日本語)と列名(日本語)を一致させておけば、 列挙の順番は関係ないでしょうか。 >>389 そうだよ 基本的に名前を見比べて1行と1オブジェクトに変換してくれるだけ 変換ルールのカスタマイズも出来るけど保守性がよくないから避けたほうがいい >>391 レスありがとうございます! 既存のストアドプロシージャーを使って、 テストコードを試してみたいと思います。 結果をマッピングできるのはとても便利ですね。 ありがとうございます! >>390 列名が日本語で書かれているんですよ。 select ID,名称 from ほにゃらら みたいな感じでデータを引っ張って来る必要があるので、 マッピングするC#クラスのプロパティーも、こういうのに合わせる必要があるわけなんです。 日本人なら分かり易いというメリットはあるんですが、 システム上の互換性でいつか面倒なことにならないかと心配しますね。 >>394 ありがとうございます。 なるほど、そうすれば英語表記のモデルクラスが使えるということですね。 日本語クラス名、プロパティー名で結構だというのなら、使う必要はないという理解でいいのかな? ところでこれは、DBContextの、関連付けとちょっと似ていますね。 メソッドチェーンしながら、ラムダ式を与えて、エンティティーの定義を行っていました。 >>391 さんのおっしゃる、 ”変換ルールのカスタマイズも出来るけど保守性がよくないから避けたほうがいい” というのは、この>>394 さんのおっしゃっているカスタマイズのことなんだろうね。 sqlのasを使うと簡単だね ただoracleだとasしても英訳した列名が30文字に収まらない場合がある DBの物理的な制約を気にしたくないなら DTOからドメインオブジェクトにマップする時に物理名を論理名に変換すればいいよ DTOは日本語を含んでよい ドメインオブジェクトは日本語を含まない 変換処理はC#で手作業で書く DapperでDTOを取得して変換処理に流し込む >>397 >変換処理はC#で手作業で書く >DapperでDTOを取得して変換処理に流し込む これは、どういうことですか? Dapperはドメインオブジェクト(モデルクラス)に行データを自動的に変換してくれるものだと理解してます。 そして、必要なら、日本語の列名を、クラスの英語名のプロパティ名に変換するために、>>394 さんの方法を使うのですね。 Dapper自体と、DTOとの区別がわかりません。 いったん取得した行データの日本語名プロパティを含むクラス型を、完全英語名のクラス型に値をプロパティごとにC#でコピーするということでしょうか? DapperはSQLの結果セットをDTOにマッピングしてくれるだけ DTOからドメインオブジェクトへのマッピングは別途用意しなければならない DTOとドメインオブジェクトを同一視してマッピングを省くことは可能だけど それをやるとドメインオブジェクトが歪な構造になるのでオススメしない >>399 >DTOとドメインオブジェクトを同一視 >DTOとドメインオブジェクトを同一視 自分はその同一視をしていたのかもしれない。これは、アプリの設計に深く関わる問題ですね。 ドメイン駆動アプリ?だかの参考書を読んでいたときのことを思い出しました。 でも知識を使う前に、すっかり忘れていました。 最初、こんなつもりでした。 例えばこんな感じで、モデルクラスを定義して、 自分の場合、データベースの日本語列名に合わせて、日本語のプロパティー名で定義して、 public class 人間 { public int Id { get; set; } public string 名前 { get; set; } } そして、 SQL Server → Dapper →「人間クラス」 (こうして、人間クラスに行データがマッピングされる。だから、「人間クラス」がDTOでいいのかな。) で、 ControllerのActionメソッドとかから、この「人間クラス」のオブジェクトにアクセスして、 Viewなりに渡そうとしていました。 ああ、これでは同一視になりますよね。 つづく↓ >DTOからドメインオブジェクトへのマッピングは別途用意しなければならない SQL Server→Dapper→「人間クラス(DTO)」→→(変換)→→「ドメインオブジェクト」 なるほど。>>397 でおしゃっていたことが理解できたかも。 DTOまでは、日本語名のクラス名やプロパティーでもOkなわけですね。 しかし、ドメインオブジェクトという形に、変形してアプリに統一性を持たせるべきで、 そのときに(ついでに)、英語に統一すればいいというわけなのか。 もし、私の理解が間違っていなければ、目から鱗でした! ありがとうございます。もう一度、設計のための参考書を開いてみたいと思います。 勉強したことを使わないうちに、どんどん忘れてしまう。。。。 しかし、こうして、 日本語名から英語名への統一でも、ドメインオブジェクトという考え方が役に立つんですねえ。 ありがとうございます。 >>402 DTOからドメインオブジェクトへの変換は一パターンとは限らない だからDapperからDTOにマッピングする時点で、c#の規約に沿った形のクラス/プロパティ名にしておくと便利 じゃなきゃAutoMapperすら使えないし >>403 どこで、日本語名の列を、英語名のプロパティーに変換するかという問題なんですよね。 SQL Server→Dapper→「人間クラス(DTO)」→→(変換)→→「ドメインオブジェクト」 SQL Server→Dapper→→(変換)→→「人間クラス(DTO)」→ ※ →「ドメインオブジェクト」 ところで、AutoMapperは、上記の※の位置に来るという理解で正しいでしょうか。 DBには日本語つかうのに、プログラムに日本語使うのを嫌がるのが理解できん >>405 var p = new 人間(); var n = p.名前; こんな感じなのは、普通ってことでしょうか? カスタムルールはメンテナーがカスタム手順わからなくて困るパターン 手動マッピングなら5分で書けるのにルール設定がわからず1時間ハマりっぱなしとかよくある >>409 >>404 のように、 DTOとドメインオブジェクトとのあいだで、 手動変換するということですね ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ EF Coreはまだまだみたいだから、とりあえずDapperで使えればいいや Kestrelのhttp2対応ってどの辺までできたのかしら? kestrel(というかasp.net core)がまだPush対応されてなくて無事死亡 goを触ってからだとビルドとかパッケージ管理とかの遅さが気になって使えない warn: Microsoft.AspNetCore.Server.Kestrel[22] Heartbeat too longer than "00:00:01" at "03/07/2018 10:00:00 +00:00" こんな警告が出るんだけどどういう意味? 解決方法教えて >>421-422 色々と洗ってみたけどダメでした 再現性もなくログには不定期に出力されてるからKestrel側の問題なのかな でもありがとう >>423 そっかあ。 個人的に気になるインシデントなので、 もし進展があって気が向いたら書き込んでくれると嬉しいです。 VS2017で、.net core 2.0 をつかっていたんだけど、 2.1 SDK を入れてみた。 でも、プロジェウト作成で、選べない。 どうすればいい? 自己レス https://github.com/dotnet/core/issues/1131 There is no .NET Core 2.1.2. Thats the SDK version. I believe the 2.2 SDK is the one that currently supports .NET Core 2.1 targeting. なんか、何のバージョンかわからなくなってきた。 sdkのバージョンと、 ランタイムのバージョンがあるのか。 ややこしい。 .net coreランタイムのバージョンが、2.1にならないと、vsで、2.1 のテンプレートが使えないってことかな? 新しいクラスの追加とか、高速化とか、期待していたのになあ。 sdkのバージョンが、2.1 になって何かメリットあるのか? 自己レス https://jonhilton.net/2017/04/17/making-sense-of-the-different-versions-of-net-core-runtime-and-sdk/ The latest SDK (at the time of writing) is 2.1.4. This is the SDK that goes alongside .NET Core 2.0.5 (you don’t need to download the runtime separately, you can just grab this SDK and it will install everything). 勘違いしていたなあ。 ランタイムは2.0のまま変わらない。 だから、vsのテンプレートで、2.1が選べないわけか。 考えあっている? >>432 ちがう! 同じ疑問を持つ人のために情報共有 >>431 SDKは、global.jsonで指定しない限りインストールされている最新のものが使われる。 だからそもそも何がしたいのかい? >>434 vs2017と、去年八月に登場した.net core 2.0sdkを組み合わせたら、.net core2.0アプリを作成できるようになった。.net core2.0アプリの テンプレートを選べるようになった。 同じように、.net core sdk2.1.4のインストールで、 .net core2.1のアプリが作成できるようになると思ったが、どうやら違うらしいとわかったわけです。 sdkを刷新して、2.1.4にしたら、 何か新しいクラスライブラリの恩恵を受けられるのですか?ランタイムは、2.0.4のままで? vs2017と、.net core sdkとの関係がわかりません。 sdkとランタイムは違うのですよね。 sdkって、クラスライブラリを含んでいるのかな? .NET Core2.1はプレビュー版しか出てないよ ASP.NET Core2.1を使いたいなら、Visual Studio自体もプレビュー版じゃないとだめ >>439 ありがとうございます。ちょっとわかってきました。 SDK 2.1.4をインストールしたのに、VS2017で、.net core 2.0のテンプレしか選択できなかったのは、当然だったんですね。 >>438 読みます。 https://docs.microsoft.com/en-us/dotnet/core/versions/ There are lots of moving parts that version independently in .NET Core. However, starting with .NET Core 2.0, there is an easy to understand top-level version number that everybody understands to be the version of ".NET Core" as a whole. 本当は、.net core は複数のパーツから成り立っていてそれぞれバージョンが設定されるのに、 それが登場したときには、まとめてバージョン2.0という設定をやったので、 皆に誤解を与えたというわけだな。 でも、バージョンの付け方が、今度からがらっと変わるらしいね。 The version scheme is changing in future releases. You can see the current proposal at the dotnet/designs repository. https://github.com/dotnet/designs/pull/29 ガーデニングしてそうな女性がバリバリに働いているんだな。> MS https://github.com/dotnet/core/issues/1131 このページも参考になった。 "dotnet --version" returns 2.1.2 that is the SDK version not runtime version? That has to be the SDK version because there is no 2.1.2 runtime version in existence. I can see how this is all very confusing. 総合テストをしようとnew TestServerしてserver.Host.Services.GetService<xxx>()しようとすると System.InvalidOperationException : No service for type 'xxx' has been registered. とエラーが出て困ってます デバックでは問題なく起動していてnew TestServerに使うWebHostBuilderは同じものを使用してUseContentRoot()を変更しています 原因が分からないのでどなたか解決策を教えてください public class Startup { public Startup(IConfiguration configuration, IHostingEnvironment environment) システムによって、自動的に、IHostingEnvironment environment は取得できるけど、 普通のユーザーメソッド内で、IHostingEnvironment environment を取得するか、 生成することってできるでしょうか。 IHostingEnvironment environment の内容を知りたいんですが、 Startupに手を加えたくないわけです。 >>445 インターフェイスなので実体化できません。 このインターフェイスを実装するクラスってあるんでしょうか。 そして、任意のタイミングでそれを実体化したときに、 適切に初期化されるんでしょうか。 >>446 実装クラスはFramework側で勝手にInjectしてくれてるから、どこでも普通にDIコンテナからとれるよ? >>447 c#の経験は少しあるのですが、 .net coreなどの最新の技術には疎いです。 どのようにして、インスタンスの参照を得られるのか、 コードで示して貰えると幸いです。 Programクラスに、静的メンバを設けて、それを経由で、アクセスしょうかと考えていたところです。 >>448 ASP.NET Core DI でググってひと通り基本的な知識を入れてから、もし分からなければまたおいで class MyClass : IMyClass { private IHost... h; public MyClass(IHost... h) } this.h = h; } public void MyMethod() { h.xxx; } linuxのdotnet-sdk-2.1.105でまともに使えるSQLiteのnugetライブラリってどれよ Microsoft.EntityFrameworkCore.SqliteはFileIOExceptionで起動しないし Microsoft.Data.Sqliteはメモリリークしまくるし >>457 FileIOExceptionのスタックトレース ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる