.Net Core / Net ASP Core [無断転載禁止]©2ch.net

1デフォルトの名無しさん2016/06/30(木) 03:45:41.80ID:EQd6Pds5
おらの群馬さにはIISなんてねえもんでりなっくすさ使ってしぃしゃーぷさ動かすべえな
こんなの動くなんておったまげえな時代だわな

んだいくべえ

364デフォルトの名無しさん2018/02/04(日) 21:58:59.60ID:l4jEutiZ
>>362
まさか複数形じゃないとテーブル名として使えないとでも思ってる?

365デフォルトの名無しさん2018/02/04(日) 23:06:57.46ID:QYMD/NQL
>>363
sql server 7.0の頃から構築したテーブルで、
日本語のテーブル名と列名が使われているんだよ。
そのままスキャフォールディングするのも心配。
日本語のクラス名とかプロパティーなんて見たくないし。

366デフォルトの名無しさん2018/02/04(日) 23:07:57.43ID:QYMD/NQL
>>364
いや、規約から外れていると何か不具合が発生しそうで。

367デフォルトの名無しさん2018/02/04(日) 23:08:51.68ID:jtpbEfK1
view使えば?

368デフォルトの名無しさん2018/02/04(日) 23:10:53.16ID:PfVNu0W/
>>366
ドキュメントよく読め

369デフォルトの名無しさん2018/02/05(月) 07:55:09.71ID:yOavcQZS
>>368
水色の.net coreの参考書しか読んだことない。
あと、薄紫色のASP.NET MVCの書籍とか。
ドキュメントなんかあるんか?

370デフォルトの名無しさん2018/02/05(月) 07:56:15.21ID:yOavcQZS
>>367
View?
htmlを描画するやつのことではないと思うけど。

371デフォルトの名無しさん2018/02/05(月) 08:53:07.85ID:Nl1w3IZD
sqlのviewだと思うが、書き込みは普通にテーブル使うしか無い
どうしても避けたいのならWebAPIでも使うのが最善かも
DBがインストールされたサーバー内だけなら日本語テーブル名問題は起こらないだろうから
その後を全部英文字にすればトラブルフリーに出来るかもしれん

372デフォルトの名無しさん2018/02/05(月) 09:02:42.42ID:mbLKcWnp
>>369
公式の

本が欲しいんならこれとか
https://www.manning.com/books/entity-framework-core-in-action

この著者のブログも読んでみ

373デフォルトの名無しさん2018/02/05(月) 18:16:52.57ID:mbLKcWnp

374デフォルトの名無しさん2018/02/06(火) 00:30:12.46ID:Sf4AdKgB
>>372
なんか宗教くさい

375デフォルトの名無しさん2018/02/06(火) 00:31:20.97ID:Ss12EoFr
>>374
表紙の話?

376デフォルトの名無しさん2018/02/06(火) 02:09:36.97ID:Sf4AdKgB
>>375
うん、でも嫌いではないんだけどね、多分、カバーで隠して読むだろうね

377デフォルトの名無しさん2018/02/06(火) 02:22:08.83ID:Ss12EoFr
>>376
電子書籍だからカバーもクソもないと思うが

378デフォルトの名無しさん2018/02/06(火) 22:06:09.44ID:Sf4AdKgB
>>377
アマゾンでは紙本だったよ

379デフォルトの名無しさん2018/02/06(火) 22:07:06.60ID:Ss12EoFr
>>378
ごめん

380デフォルトの名無しさん2018/02/07(水) 03:10:06.91ID:PMKzxqpw
ASP.NET MVC の 知識ってほとんどそのまま、.net core MVC で通用すると考えていいのかな?

381デフォルトの名無しさん2018/02/07(水) 05:24:08.06ID:geKdTjxk
そのままではないけど、すぐになじむとは思うよ

382デフォルトの名無しさん2018/02/07(水) 13:16:27.18ID:Dhak1qt/
>>379
大丈夫

383デフォルトの名無しさん2018/02/10(土) 00:32:08.18ID:Iv+szGNR
スキャホールディングしなくても、それが出力するようなコードを、
モデルと、DbContextに自分で全部書き起こせば、
データベーステーブルでテーブルの結合したやつでも得られるんだろうか。

データベースでリレーションの設定をしていないので、スキャホールディングでテーブル結合反映されないため、
自分でコードを記述しようと思っているんです。
データベース側は既存のプログラムとの連携が壊れたら困るのでいじりたくありません。。

384デフォルトの名無しさん2018/02/10(土) 06:53:12.80ID:KnoefXX3
業務系は複雑怪奇なレガシーDBの呪縛があるからEFとの相性が最悪
SQLを手で書いてDapperでマップするのが正解だよ

385デフォルトの名無しさん2018/02/10(土) 08:43:26.95ID:X+3+SRz3
壊してもいいデータベースで開発したら?

386デフォルトの名無しさん2018/02/10(土) 11:53:53.43ID:Iv+szGNR
>>385
壊してもいいデータベースで開発してから、
それを本番のデータベースで運用する予定

>>384
Dapperについて調べてみます。
ストアドプロシジャとパラメーターがつかえたらいいんだけどなあ

387デフォルトの名無しさん2018/02/10(土) 14:09:18.74ID:xv5r03JM
>>386
ストアドプロシージャとパラメーター使えるよ

388デフォルトの名無しさん2018/02/10(土) 17:39:31.77ID:Iv+szGNR
>>387
ありがとうございます

389デフォルトの名無しさん2018/02/11(日) 15:30:58.53ID:NLXiui3Z
Dapperでは、SQLやストアドプロシジャの結果行に対応したモデルクラスに、
マッピングできるのだとわかってきました。

自分のところのストアドプロシジャでは、テーブルにはない新しい列が登場したり、列の名称が付替られたりするので、
ストアドプロシジャの結果行に対応した専用のクラスをいちいち作成しようと思いました。

ストアドプロシジャでは最終的に、SELECT文で出力したい列が列挙されています。
対応するクラスのプロパティー名(日本語)と列名(日本語)を一致させておけば、
列挙の順番は関係ないでしょうか。

390デフォルトの名無しさん2018/02/11(日) 15:41:40.43ID:NBX6x1Ct
>>389
え、日本語?

391デフォルトの名無しさん2018/02/11(日) 15:53:15.39ID:QgiY6BS8
>>389
そうだよ
基本的に名前を見比べて1行と1オブジェクトに変換してくれるだけ
変換ルールのカスタマイズも出来るけど保守性がよくないから避けたほうがいい

392デフォルトの名無しさん2018/02/11(日) 21:30:20.43ID:NLXiui3Z
>>391
レスありがとうございます!

既存のストアドプロシージャーを使って、
テストコードを試してみたいと思います。
結果をマッピングできるのはとても便利ですね。
ありがとうございます!

393デフォルトの名無しさん2018/02/11(日) 23:27:37.20ID:NLXiui3Z
>>390
列名が日本語で書かれているんですよ。

select ID,名称 from ほにゃらら

みたいな感じでデータを引っ張って来る必要があるので、
マッピングするC#クラスのプロパティーも、こういうのに合わせる必要があるわけなんです。

日本人なら分かり易いというメリットはあるんですが、
システム上の互換性でいつか面倒なことにならないかと心配しますね。

394デフォルトの名無しさん2018/02/11(日) 23:53:51.87ID:YeNWUzxx
>>393
列名とプロパティ名はこんな感じでマッピングさせる手もある
https://github.com/tmsmith/Dapper-Extensions/wiki/Customized-mapping-for-a-class

395デフォルトの名無しさん2018/02/12(月) 08:53:13.20ID:BsV1rQ8t
>>394
ありがとうございます。

なるほど、そうすれば英語表記のモデルクラスが使えるということですね。
日本語クラス名、プロパティー名で結構だというのなら、使う必要はないという理解でいいのかな?

ところでこれは、DBContextの、関連付けとちょっと似ていますね。
メソッドチェーンしながら、ラムダ式を与えて、エンティティーの定義を行っていました。

396デフォルトの名無しさん2018/02/12(月) 08:55:15.61ID:BsV1rQ8t
>>391さんのおっしゃる、
”変換ルールのカスタマイズも出来るけど保守性がよくないから避けたほうがいい”
というのは、この>>394さんのおっしゃっているカスタマイズのことなんだろうね。

397デフォルトの名無しさん2018/02/12(月) 09:05:51.69ID:Bk9VmC4X
sqlのasを使うと簡単だね
ただoracleだとasしても英訳した列名が30文字に収まらない場合がある

DBの物理的な制約を気にしたくないなら
DTOからドメインオブジェクトにマップする時に物理名を論理名に変換すればいいよ
DTOは日本語を含んでよい
ドメインオブジェクトは日本語を含まない
変換処理はC#で手作業で書く
DapperでDTOを取得して変換処理に流し込む

398デフォルトの名無しさん2018/02/12(月) 10:06:28.69ID:BsV1rQ8t
>>397
>変換処理はC#で手作業で書く
>DapperでDTOを取得して変換処理に流し込む

これは、どういうことですか?
Dapperはドメインオブジェクト(モデルクラス)に行データを自動的に変換してくれるものだと理解してます。

そして、必要なら、日本語の列名を、クラスの英語名のプロパティ名に変換するために、>>394さんの方法を使うのですね。

Dapper自体と、DTOとの区別がわかりません。
いったん取得した行データの日本語名プロパティを含むクラス型を、完全英語名のクラス型に値をプロパティごとにC#でコピーするということでしょうか?

399デフォルトの名無しさん2018/02/12(月) 11:47:11.65ID:Bk9VmC4X
DapperはSQLの結果セットをDTOにマッピングしてくれるだけ
DTOからドメインオブジェクトへのマッピングは別途用意しなければならない
DTOとドメインオブジェクトを同一視してマッピングを省くことは可能だけど
それをやるとドメインオブジェクトが歪な構造になるのでオススメしない

400デフォルトの名無しさん2018/02/12(月) 11:52:36.00ID:BsV1rQ8t
>>399
>DTOとドメインオブジェクトを同一視

401デフォルトの名無しさん2018/02/12(月) 12:16:20.63ID:BsV1rQ8t
>DTOとドメインオブジェクトを同一視

自分はその同一視をしていたのかもしれない。これは、アプリの設計に深く関わる問題ですね。
ドメイン駆動アプリ?だかの参考書を読んでいたときのことを思い出しました。
でも知識を使う前に、すっかり忘れていました。


最初、こんなつもりでした。
例えばこんな感じで、モデルクラスを定義して、
自分の場合、データベースの日本語列名に合わせて、日本語のプロパティー名で定義して、

public class 人間
{
public int Id { get; set; }
public string 名前 { get; set; }
}

そして、
SQL Server → Dapper →「人間クラス」
(こうして、人間クラスに行データがマッピングされる。だから、「人間クラス」がDTOでいいのかな。)

で、
ControllerのActionメソッドとかから、この「人間クラス」のオブジェクトにアクセスして、
Viewなりに渡そうとしていました。

ああ、これでは同一視になりますよね。

つづく↓

402デフォルトの名無しさん2018/02/12(月) 12:17:48.80ID:BsV1rQ8t
>DTOからドメインオブジェクトへのマッピングは別途用意しなければならない

SQL Server→Dapper→「人間クラス(DTO)」→→(変換)→→「ドメインオブジェクト」

なるほど。>>397でおしゃっていたことが理解できたかも。

DTOまでは、日本語名のクラス名やプロパティーでもOkなわけですね。
しかし、ドメインオブジェクトという形に、変形してアプリに統一性を持たせるべきで、
そのときに(ついでに)、英語に統一すればいいというわけなのか。

もし、私の理解が間違っていなければ、目から鱗でした!
ありがとうございます。もう一度、設計のための参考書を開いてみたいと思います。
勉強したことを使わないうちに、どんどん忘れてしまう。。。。

しかし、こうして、
日本語名から英語名への統一でも、ドメインオブジェクトという考え方が役に立つんですねえ。

ありがとうございます。

403デフォルトの名無しさん2018/02/12(月) 12:53:34.77ID:GfEZnF0r
>>402
DTOからドメインオブジェクトへの変換は一パターンとは限らない
だからDapperからDTOにマッピングする時点で、c#の規約に沿った形のクラス/プロパティ名にしておくと便利
じゃなきゃAutoMapperすら使えないし

404デフォルトの名無しさん2018/02/13(火) 13:00:12.61ID:iaxO17aK
>>403
どこで、日本語名の列を、英語名のプロパティーに変換するかという問題なんですよね。


SQL Server→Dapper→「人間クラス(DTO)」→→(変換)→→「ドメインオブジェクト」

SQL Server→Dapper→→(変換)→→「人間クラス(DTO)」→ ※ →「ドメインオブジェクト」


ところで、AutoMapperは、上記の※の位置に来るという理解で正しいでしょうか。

405デフォルトの名無しさん2018/02/13(火) 19:41:40.28ID:3CyK4CdI
DBには日本語つかうのに、プログラムに日本語使うのを嫌がるのが理解できん

406デフォルトの名無しさん2018/02/13(火) 20:39:57.91ID:ItXL3xp2
>>405
別に質問者は嫌がってなくね?

407デフォルトの名無しさん2018/02/13(火) 22:00:43.94ID:JC9fn+CH
>>405
var p = new 人間();
var n = p.名前;

こんな感じなのは、普通ってことでしょうか?

408デフォルトの名無しさん2018/02/13(火) 22:02:48.71ID:MkuiJNyl
var s = new 🍣();

409デフォルトの名無しさん2018/02/13(火) 22:25:03.46ID:YVR14H+q
カスタムルールはメンテナーがカスタム手順わからなくて困るパターン
手動マッピングなら5分で書けるのにルール設定がわからず1時間ハマりっぱなしとかよくある

410デフォルトの名無しさん2018/02/14(水) 00:25:23.19ID:ZUhxPQA+
>>409

>>404のように、
DTOとドメインオブジェクトとのあいだで、
手動変換するということですね

411デフォルトの名無しさん2018/02/16(金) 06:17:18.75ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

412デフォルトの名無しさん2018/02/17(土) 13:05:06.90ID:suX8xbj+
Oracle has updated its .NET Core statement of direction. http://www.oracle.com/technetwork/topics/dotnet/tech-info/odpnet-dotnet-ef-core-sod-4395108.pdf

tl;dr
https://t.co/Zn0Rz2SBM2 Core production in CY Q3 2018. EF Core beta shortly after targeting same quarter.
https://twitter.com/OracleDOTNET/status/964631730220023808
https://twitter.com/OracleDOTNET/status/964632656725008384 👀
Rock54: Caution(BBR-MD5:b73a9cd27f0065c395082e3925dacf01)

413デフォルトの名無しさん2018/02/17(土) 13:22:36.50ID:suX8xbj+
サンプルのリポジトリ
https://github.com/oracle/dotnet-db-samples

414デフォルトの名無しさん2018/02/17(土) 13:25:36.07ID:suX8xbj+
EF Coreはまだまだみたいだから、とりあえずDapperで使えればいいや

新着レスの表示
レスを投稿する