ふらっと C#,C♯,C#(初心者用) Part151

■ このスレッドは過去ログ倉庫に格納されています
2021/05/16(日) 10:45:59.00ID:8qTwOc620
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/07/16(金) 05:44:43.56ID:kw030b9nd
>>626
そういうの好きだな。だから、結果的に>>613になっても俺的にはおk。
メソッド名を見れば判るようになるし。
628デフォルトの名無しさん (ブーイモ MMde-uKKI)
垢版 |
2021/07/16(金) 10:50:53.05ID:5OijHeJ1M
AWS LambdaをC#で使ってる人おる?
DIの正しいやり方がわからん
ググると
FunctionクラスのデフォルトコンストラクタでServiceCollectionをインスタンス化して
Serviceを追加して解決してprivateフィールドに代入
的なコードは出てくるんだけど
なんか無理矢理感があってすごく気持ち悪い
ASP.NET CoreのControllerみたいにコンストラクタインジェクションしてくれればいいんだけどAWS LambdaのFunctionはそういうのないのかな
2021/07/16(金) 12:25:27.67ID:Oq98um8EM
謎のランタイムが勝手にどっかで注入してくる方が気持ち悪いわ
Azure FunctionsなんかだとAzure側のランタイムがASP.NETと統合されてて注入できたりするけど、依存関係地獄になりがちでぶっちゃけ糞
Lambdaはその点余計なこと一切しないから単純明快で楽だ
そもそもLambdaごときにいちいちDIなんか要らんわ
FaaS使うんだったら差し替えはFunctionレベルでやるのが基本だよ
2021/07/16(金) 12:44:52.48ID:Oq98um8EM
WindowsってPowerShell以前はコマンドラインシェルが貧弱だったから、開発者は伝統的に何でもかんでもアプリケーションコードの箱庭内でやってしまう傾向があって、
Azure Functionsの設計思想なんかもそういう箱庭コーディングの文化を引き継いでいるところがある
対してAWSは小物をシェルで組み合わせて使うUNIX的な文化の色が強くて、Lambda関数もコーディング環境というよりはあくまで「ちゃんと単独で機能する小さなコマンド」なの
その中でさらにドメイン切って差し替えられるようにして、みたいな発想はしないんだよ
631628 (ブーイモ MMde-uKKI)
垢版 |
2021/07/16(金) 13:41:32.46ID:YjA+/kj2M
すまん自己解決したわ
AWSオフィシャルのLambda/ASP.NET Coreアダプタがあるらしい
まあそらそうだよなDIもまともに出来ないとかゴミサービスでしか使えんし
2021/07/17(土) 01:55:18.52ID:YUa2zwOi0
最終的に保守のしやすいコードが一番ってことになりそうだ
2021/07/17(土) 04:37:12.67ID:SWDN49PP0
どうでもいいけど、状況判定に
if(HogeButton.Text == "あ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。

明日から犯人探しかな・・・
634デフォルトの名無しさん (ブーイモ MMde-nkhS)
垢版 |
2021/07/17(土) 05:05:25.92ID:rQBsLn9RM
どうでもいいけど、状況判定に
if(HogeButton.Text == "ほ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。

明日から犯人探しかな・・・
2021/07/17(土) 09:29:37.87ID:hzHLbOfFa
数学の積分で使うSの大きなやつって
for文なの?
2021/07/17(土) 09:47:49.19ID:FY+xgTJtM
そう妄想するのは自由
2021/07/17(土) 10:05:47.56ID:wcPyadci0
数値積分でググるといいんでないかな
2021/07/17(土) 12:05:36.74ID:ED/D6NvId
時間の流れが乱れている…
639デフォルトの名無しさん (エムゾネ FFfa-E0YB)
垢版 |
2021/07/17(土) 15:01:08.33ID:eTC1af8gF
Σはforだが(といってもΣの方が遥かに高速な訳だが)
∫はforではない
2021/07/17(土) 15:50:53.78ID:IsTBXftL0
Πは?
2021/07/17(土) 15:59:07.68ID:oVxa7DA2a
>>639
Σも普通は解析的に答えを出すので、数値演算(ループ)を連想するのはかなり違うと思う
642デフォルトの名無しさん (エムゾネ FFfa-E0YB)
垢版 |
2021/07/17(土) 16:04:35.47ID:eTC1af8gF
forの解釈として毎回実行時計算する言語ならそうだが
forでもコンパイル時にΣやΠが解析的に完了してる言語があっても良いだろう
C#スレだからどうでも良いけど
2021/07/17(土) 17:20:34.66ID:6qmea//qa
解析的に求めるっていうのは例えば等差数列の式から
その和の公式を導出するようなことを言うんですよ。
2021/07/17(土) 18:21:36.91ID:tq+22Yf30
プログラマと数学屋で
用語の齟齬が起きているな
2021/07/17(土) 18:51:59.16ID:6qmea//qa
いやいや、解析的っていうのは数値計算の対義語みたいなもので「数学的に解く」
みたいなニュアンスだと思うから数学屋さんはあまり使わないと思うよ知らんけど。

情報屋の言い回しだと思うよ。
俺は大学のアルゴリズムの講義でニュートン法とかやった時に聞いたのが最初の気がする
先生はもちろん情報工学の先生だ
2021/07/17(土) 18:59:49.36ID:RupVd7jf0
>>639
高速って何よ
数学記号のΣとプログラムの制御構文のforで、概念が違うものをどう比較したのさ
2021/07/17(土) 19:16:24.85ID:NOfppBHx0
ロックマンで見た
2021/07/17(土) 19:24:46.25ID:iVAlWQfZM
https://ja.wikipedia.org/wiki/%E8%A7%A3%E6%9E%90%E5%AD%A6
2021/07/17(土) 19:29:45.80ID:ALTiYW8P0
シグマゼロビーム
650デフォルトの名無しさん (ワッチョイ b101-E0YB)
垢版 |
2021/07/18(日) 13:09:02.92ID:RVrShVdw0
ビジネスが破綻する大半の原因は、 ”ビジネスを始める人の大半が、真の意味での
「起業家」ではなく、 起業したい、という熱に浮かれた「職人」として働いているに過ぎない。”
という事実にあります。
「職人」によって運営されているビジネスは、ビジネスが働くのではなく、彼ら自身が毎日働くこと
によって、成り立っています。
彼らは毎日、自分がやり方を知っている仕事を一生懸命にこなしていますが、「起業家」としての
視点が無いために、成長に限界が生まれます。
そして、生計を立てるために、彼ら自身がずっと働き続けないとならないのです。

誰もが必ず陥る罠
私が見ている限り、起業熱にうなされる人たちは、必ずと言ってもよいほど誤った
「仮定」を置いてしまうようだ。実は、のちに彼らが苦難の道を歩むことになるのは、
この、「仮定」が致命的に間違っているからなのである
致命的な仮定とは・・・「事業の中心となる専門的な能力があれば、事業を経営する能力は
十分に備わっている」ということである
私がこの仮定を致命的だと書いたのは、この仮定が間違っているからにほかならない
事業の中で専門的な仕事をこなすことと、その能力を生かして事業を経営することは
全く別の問題である。高い専門能力を持つ人にとって、独立は他人の為に働くという苦痛から
解放されるということを意味していた。それにもかかわらず、前提となる「仮定」が致命的とも
いえるほど間違えているために、彼らは自由になるどころか、自分が始めた事業に苦しめ
られるようになってしまうのである
マイケルEガーバー「はじめの一歩を踏み出そう」P28~29
2021/07/18(日) 19:33:43.97ID:j2ludHuAd
>>452
>>453
ありがとうございます
亀でスミマセン…
2021/07/18(日) 19:34:39.70ID:j2ludHuAd
>>454
ありがとうございます
2021/07/18(日) 19:35:09.34ID:G9pOURuid
>>455
ありがとうございます
654デフォルトの名無しさん (ワッチョイ 0154-x4cL)
垢版 |
2021/07/20(火) 06:41:50.36ID:oT6fq8l/0
SqlServerへの非同期クエリを、ORマッパー使わずにSqlConnectionとSqlCommandで送信したい場合、
Task.Run(() => sqlCommand.ExecuteReader())
と、
sqlCommand.ExecuteReaderAsync()
のどっちを使うのが理想ですか?
655デフォルトの名無しさん (ワッチョイ 0d01-R8z5)
垢版 |
2021/07/20(火) 08:27:13.73ID:6lATwKKz0
Asyncついたメソッドをawaitしたまへ
2021/07/20(火) 13:10:25.48ID:mJ2OrUml0
>>654
後者じゃね
2021/07/20(火) 13:19:06.99ID:luEetGrO0
後者があるのに前者を使うメリットが分からない
658デフォルトの名無しさん (ワッチョイ 9d5f-E0YB)
垢版 |
2021/07/20(火) 13:58:57.54ID:DgdZFi450
>>654
その選択肢で悩んじゃう君にぴったりの記事があるぞ
https://www.kekyo.net/2021/02/24/7268
https://www.kekyo.net/2016/12/06/6186
2021/07/20(火) 14:12:48.00ID:oT6fq8l/0
ありがとうございます。
普通に考えたら後者なのですが、フォームのLoadイベント時に上記処理を実行するようになっており、フォームLoad時にサーバーとの通信異常が発生していた場合、
前者の場合はフォームが応答する状態のまま、1〜2秒して例外をキャッチ出来ます。
後者の場合はフォームが応答しなくなり、1〜2秒して例外をキャッチ出来ます。
それでちょっと悩んでましたが、後者にします。
2021/07/20(火) 14:31:57.96ID:r+hLGJrq0
動作が固まるのはお前さんの使い方がおかしい。
2021/07/20(火) 15:01:47.73ID:BcEcK3qF0
僕も固まりそうです
2021/07/20(火) 18:15:30.23ID:ddjaqKuMa
ボクのお尻も固まりそうです
2021/07/20(火) 18:32:55.57ID:P25MFMIuM
async汚染が怖いので使わない方向で
2021/07/20(火) 19:34:56.43ID:SMoWJv7O0
WPFのバインディングについて質問です。
テキストボックスに読み取り専用プロパティをバインディングしたいのですが、
プロパティの値を変更してもテキストボックスに反映されません。
調べたら、プロパティの変更を通知するイベントが無いとだめとのことだったのですが、
setterなしでに通知イベントを実装する方法は無いでしょうか。

例:
public class ViewModel
{
public int ID { get; set; }
public string Name { get; set; }
public string NameSan { get => Name + "-san"; }
}

<TextBox Text="{Binding NameSan}" />
2021/07/20(火) 19:59:24.26ID:K5CNGksB0
誰にとっての読み取り専用なん?
2021/07/20(火) 20:08:36.24ID:K5CNGksB0
wpfでバインドできないプロパティは
DependencyPropertyでないから
DependencyObjectを派生させる必要がある
→UserControlを作ってそこにDependencyPropertyを作成する

ってググったら出てきた
667デフォルトの名無しさん (ワッチョイ 9d5f-Rh1M)
垢版 |
2021/07/20(火) 20:21:36.49ID:GzauUP740
XAML側でNameをバインディングしてコンバーターで-san付けるかなあ
2021/07/20(火) 20:27:17.58ID:luEetGrO0
>>664
NameプロパティのSetterでまとめて通知すれば良い

private string _name;
public string Name
{
get => _name;
set
{
_name = value;
PropertyChanged?.Invoke( nameof( Name ) );
PropertyChanged?.Invoke( nameof( NameSan ) );
}
}
669デフォルトの名無しさん (ワッチョイ 0d01-E0YB)
垢版 |
2021/07/20(火) 20:35:19.09ID:SMoWJv7O0
>>664です。
沢山の回答レスありがとうございます。
例として記入したものが不適切でしたので、訂正させてください。
実際はNamesanのgetterには別クラスから値を取得するメソッドが実装されており、
NameやIDはNamesanでは使用しないものになります。

public class ViewModel
{
 public string NameSan
 {
 get
 { //別クラスから値を取得するメソッド}

なので、>>668様にご教示頂いた方法は使用できない形になります。
2021/07/20(火) 21:00:19.75ID:luEetGrO0
>>669
外のクラスだろうがやることは変わらない
外のクラスからNameSanプロパティの内容が変わるタイミングで同じように通知する
外のクラスを変更するのが出来なければタイマーで通知を出すなんて荒業も思い付いたけどいまいち
2021/07/20(火) 21:07:59.62ID:SMoWJv7O0
>>670
>外のクラスからNameSanプロパティの内容が変わるタイミングで同じように通知する
ありがとうございます。外のクラスから通知させることができるのですね。
早速試してみたいと思います。

教えてくれた皆様、ありがとうございました。
672デフォルトの名無しさん (ワッチョイ 9d5f-Rh1M)
垢版 |
2021/07/20(火) 21:11:28.67ID:GzauUP740
なんでパターン崩してイレギュラーなことしようとするんだろ
2021/07/20(火) 21:45:11.17ID:luEetGrO0
>>670
ちょっと訂正。忘れてた。
クラスの外からイベントを直接発生させられないから、ViewModelクラスに変更通知イベントを
発生させるメソッドを実装して、外のクラスからはそのメソッドを呼び出す必要がある。

public Class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void FirePropetyChangedEvent()
{
PropertyChanged?.Invoke( nameof( NamaSan ) );
}
}
2021/07/20(火) 22:00:21.86ID:K5CNGksB0
>>672
その時点でこのスレには相応しくないよね
2021/07/21(水) 21:46:25.70ID:Ra0jV4kr0
その外のクラスの変更通知を受け取って、自身の変更通知をだせばいいんじゃないのか
なぜわざわざ外のクラスが別クラスのメソッド呼ぶんだ?依存関係がおかしいだろ
2021/07/22(木) 09:48:14.07ID:H+nzk7c30
>>673
イベントで実装する必要性がよく分からないんだよな
FuncやActionでよくねって思っちゃう
2021/07/22(木) 11:03:00.91ID:cBUwSw0B0
>>675
だね

Modelの値が変更されたらViewModelの値も変更してUIも更新したいってことだから
ViewModelでModelの変更通知をsubscribeしてsetter経由でPropertyChangedイベントを発生させてUIを更新すればいい
値の更新が必要にもかかわらず読み取り専用プロパティにする意味がよくわからない
2021/07/22(木) 15:01:08.94ID:2BJFjQfb0
PropertyChangedイベントを発生させれば事足りるのだが
setter経由させる意味がわからん
そのために読み取り専用を読み書きに変えるのか?
2021/07/22(木) 15:10:14.18ID:04ABr3MxM
WPFなら仕方ない
嫌ならオワコンWPFなんか捨ててWebで仮想DOM系のフレームワーク使えば何もしなくても自動的に差分取ってくれるよ
2021/07/22(木) 15:34:51.65ID:cBUwSw0B0
>>678
>PropertyChangedイベントを発生させれば事足りるのだが

どこで発生させるの?
2021/07/22(木) 17:41:00.24ID:ViOG2+oF0
適当にはこんな感じでしょ
model.PropertyChanged += (sender, e) => {
if (e.PropertyName == nameof(model.Hoge)) {
this.OnPropertyChanged(nameof(this.Piyo));
}
};

public string Piyo => $"OK {this.model.Hoge}";
2021/07/22(木) 19:46:33.52ID:UxCXOW0H0
イベントを発生させてないじゃん
2021/07/22(木) 19:51:13.33ID:vwDpdZeFM
基本をまず理解してないなあw
684デフォルトの名無しさん (ワッチョイ 695f-uCgs)
垢版 |
2021/07/23(金) 21:15:00.87ID:ETT9THzl0
PropertyChangedという言葉の意味を考えてみろ
setterにあるのが自然だろ
おまじないだよ考えなくていい
2021/07/23(金) 23:01:35.61ID:xliiSqIt0
そのためにわざわざ読み取り専用でいいプロパティにsetter作れってか
2021/07/23(金) 23:08:52.13ID:c4wX/KeRM
>>684
よく勘違いしてる人いるけど、イベントの-edは過去分詞じゃなくて動詞の過去形
つまりプロパティが他者によって変更されたのではなくプロパティが主体なので、
setterによらず自発的に変更イベントを発生させたとしてもなんら不自然ではない
2021/07/24(土) 00:23:31.06ID:h1SwVBD3a
イベントが過去形か受動態かについては議論があるよ
全部過去形だというのは明らかに無理があるw
どっちの場合もあると思うしそれでいいでしょ。

受動態>過去形>完了形

一般的な使用頻度はこうじゃないかな。
しばらく前からイベントに普通の名詞形を使う命名の仕方もあるよね
2021/07/24(土) 00:26:07.51ID:xo8cuQ5sM
>>687
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/names-of-type-members#names-of-events
2021/07/24(土) 00:33:52.24ID:h1SwVBD3a
>>688
それはあくまでガイドライン。
実態の話をしてるんでしょ。

例えばそこのページに出ているDroppedDown、
dropは自動詞だと思うので過去形だという主張はちょと無理がある
2021/07/24(土) 00:36:42.84ID:LBBZ+Kmj0
長々と何やってんだこいつらは
2021/07/24(土) 00:55:30.71ID:5I2AJlas0
>>689
droppedは過去形でよく使わんか?
an apple dropped down.とか
stock price dropped.とか。
2021/07/24(土) 01:44:28.78ID:fvYf7+8hM
よく勘違いしてる人いるけどwww
2021/07/24(土) 01:47:50.50ID:1HbXMJpe0
その労力でドキュメント書けよと
694デフォルトの名無しさん (ワッチョイ 695f-qCnf)
垢版 |
2021/07/24(土) 02:04:43.55ID:hjQXc5u90
何したいのかよくわからんけど
getterしか必要ないってことはそもそも画面に表示する必要ないプロパティじゃないの
2021/07/24(土) 02:16:18.66ID:1HbXMJpe0
イミフ
値に単位でも付いてんじゃん?
2021/07/24(土) 02:31:41.54ID:h1SwVBD3a
>>691
何を言っているのか意味がわかんないけど、自動詞って言葉の意味は分かる?
dropしたのはDroppedDownイベントを発生させるオブジェクトではないよね?
イベントを発生させるオブジェクトはdropしたんじゃなくて「された」んだよw

もちろん「何かが落ちた」という現象を通知するイベントなんだと強弁することもできるが、
これ言ってて苦しいでしょ(笑)不自然で無理矢理すぎる。
受動態だって考える方が100倍自然だ。

Clickedイベントとかも同じ。
これが過去形ならButtonが自分で自分をクリックしたのかとw
お前はクリックしたんじゃなくてされたんだろうがとw
2021/07/24(土) 02:49:48.99ID:hRScAD3a0
どうでもいいことをw
2021/07/24(土) 07:33:48.35ID:Ogl9r0n00
続きは議論スレでどうぞ。

ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/
2021/07/24(土) 09:11:25.75ID:5I2AJlas0
>>696
自動詞わかるよ?

なんで自制を使うかって理由が抜けてるんだと思う。
ネイティブにとってもそこはMSの方針いけてねえよなって思うところかもしれんのだと思うんだけど、MSはBeforeClickとAfterClickとかそういう接頭語を使ってイベント発火順を表して欲しくないんよ。
なので、Clickのあとに起こるイベントはClickedなんよ。
Click→Clicking→Clickedになる。
2021/07/24(土) 09:34:03.83ID:LgxXeocX0
NCが無いぞ
2021/07/24(土) 10:12:44.82ID:mVGUTLQy0
>>694
ViewModelでの話に限って言うと
setterを持っているってことはViewから入力があるという含意がある
(もちろんケースバイケースでそうでない設計にすることもある)

で、例えばViewのラベルで現在時刻表示するためにViewModelにNowTimeプロパティを用意したとして
Viewからの入力はないんだからsetterを用意するのはおかしいよね、ということ
2021/07/24(土) 11:05:01.44ID:syFCi9m80
>>698
誘われてあっちを久し振りに読んでみたけど、ここよりも有意義なことが書いてある気がしてならない。
2021/07/24(土) 12:26:37.04ID:rh7fcU6F0
>>701
現在時刻は変化してくんだからprivateなセッターで値を更新して、プロパティ変更イベント発生させればいいんじゃないの?
2021/07/24(土) 12:40:41.42ID:qEX1axDl0
>>701
>setterを持っているってことはViewから入力があるという含意がある

ないよ
外部から呼ばれたくなければprivate/protectedなsetterを使う

現在時刻のような呼び出しのたびに変化するような値は一般的にプロパティにすべきじゃないよ
(DateTime.Nowとかあるけど、あれはMSも間違いだと思ってるらしい)
2021/07/24(土) 12:42:42.49ID:mVGUTLQy0
別にそれでもいいんだけど
現在時刻そのものはDateTime.Nowでとるじゃん(これがModelに相当する)
わざわざViewModelにDateTimeのフィールド置いたりとかする必要がない
ViewModelは単にDateTime.Nowを返すgetterを持つだけで充分
setter書いても実際には何もsetしないとか違和感バリバリだし
2021/07/24(土) 12:46:48.97ID:M/JULpVd0
>>704
> (DateTime.Nowとかあるけど、あれはMSも間違いだと思ってるらしい
ソースは?
2021/07/24(土) 13:18:24.45ID:v4FoWuLT0
もとの話は他のクラスのプロパティから導出されるプロパティって話だったんだが
2021/07/24(土) 13:23:10.38ID:rh7fcU6F0
>>705
それでもいいじゃなくて、どうクラスを設計するか
取得した時点でモデルプロパティ値が更新されたと見なす仕様なのか、リアルタイムで更新する仕様なのか
単に現在時刻をとれればいいのであれば、それはプロパティじゃなくてメソッドだし、プロパティ変更イベントを用意する必要もない
2021/07/24(土) 13:39:01.39ID:1RH6PTqTM
DateTime.Nowは設計失敗の産物って話、俺もどこかで読んだ記憶があったんだけど
おおもとのソースは書籍だったみたいだ
ググったら個人ブログの感想でこんなのが引っかかった
https://ufcpp.wordpress.com/2009/12/27/net-%e3%81%ae%e3%82%af%e3%83%a9%e3%82%b9%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e8%a8%ad%e8%a8%88/
2021/07/24(土) 13:48:21.00ID:8X55Gw1wM
海外のクソライブライブラリ使うとたまにそういうレベルでメソッドになったりプロパティになったり
非常に邪魔くさい

DateTime.NowがDateTime.Now()になったりDateTime.GetNow()になったりDateTime.GetInstance.Nowになったり
コロコロコロコロ変えてくる

ドキュメントが整備されてないからインテリセンスで推測して変更するしかない
2021/07/24(土) 14:41:03.27ID:pChvHGUq0
>>702
向こうでやると初心者用スレに書かない人が現れて論破されちゃうから行きたくないらしいよ
ここで議論してる人はその程度って事
712デフォルトの名無しさん (ワッチョイ 695f-MYQi)
垢版 |
2021/07/24(土) 19:53:22.67ID:hjQXc5u90
>>701
その含意はない
XAMLのModeプロパティでOneWayとか指定するようになってるし
2021/07/24(土) 20:51:57.91ID:jHuzu2oV0
俺ならModelの方にINotifyPropertyChangedを実装して、VMでは
ReadOnlyReactivePropertyで変更通知を中継するな
2021/07/25(日) 17:48:33.79ID:jAuNvB3l0
アドバイスを頂きたいです。
簡単なCRUD機能を持ったコンソールアプリがあり、EntityFrameworkを使用してSQL Serverとのやり取りを行っています。
このSQL Serverのデータベースを年毎に個々に持ちたいという要件が出てきました。
テーブル構成等は全く同じで2020年のデータベース、2021年のデータベースをそれぞれ立てるという形です。

ただ、毎年この作業の対応は出来ないので、コマンドを叩くだけのような自動化をしたいと考えております。
理由として社内の事情によりvisual studioを使用する事が難しい点があります。
その為、アプリ側でDBとの接続情報を変更して発行しなおす事がハードルが高いため、可能であれば自動化したいです。

データベースの作成はSQL文を使用すれば良いと思うのですが、EntityFrameworkを使用しているアプリ側への対応として、「接続するデータベースが変更された場合」という部分はどのように対応してよいか分かりません…。

CodeFirst、ModelFirstどちらの場合でもデータベースの変更に対応するにはやはりプログラム側で変更するしかないでしょうか?
データベースを年毎に分けた場合、過去のデータを参照したい時に年毎のデータベースそれぞれのDbContextの情報を作成しないと行けないと考えるとやはり自動化は無理でしょうか…

当方素人レベルなので良い案も浮かばず、何か少しでもアドバイス頂きたいです…。
長文大変失礼しました。
2021/07/25(日) 17:54:33.09ID:AwazG5ML0
sqlserverで1年に1回ジョブながせばいいのでは?
今年分のdbは常に'hoge'って名前にして、1/1 0:00にhogeをデタッチして名前変更。
でhogeを新規作成
2021/07/25(日) 18:11:58.13ID:jAuNvB3l0
>>715
ありがとうございます。
通常使用するのは「hoge」固定とし、年が変わるごとに「hoge2020」「hoge2021」のように名前を付けて別物として扱うということですよね。

私もこれなら行けるかもと考えていたのですが、例えば過去のデータを参照したい場合に「hoge2020」「hoge2021」の情報をアプリ側が所持していないので参照出来ないのでは…と思い悩んでいました…。(先程コンソールアプリと記述してしまいました、すみません。正しくはフォームアプリです)
2021/07/25(日) 18:27:49.79ID:AwazG5ML0
変更した情報をhogeのテーブルに持ち、クライアントへ渡しては?

hogeのConnStrInfoテーブル

ID, db_name, year
1, hoge_2018, 2018
2, hoge_2019, 2019
3, hoge_2020, 2020

これをクライアント側で取得し、動的に接続先を切り替える。
efだとConnection Stringをこねくり回すのはめんどいかもしれないけど
他に方法が思い浮かばない。
2021/07/25(日) 18:42:30.26ID:GuabS5RG0
>>714
DBが分かれていて、別のDBに接続するときに接続情報を切り替えるのは当然だと思うけどなんでそれがダメなの?
2021/07/25(日) 19:28:19.50ID:jAuNvB3l0
>>717
ありがとうございます。
こんな方法思いつきませんでした。
知識が乏しいので、私にはかなり難しそうですがプログラム側で変更出来ないならDB側で工夫するしかないですね。

>>718
アプリはEntityFrameworkを使用し、既存のデータベースからモデルを構築しています。
年毎にデータベースが増えたとしてもvisual studioの機能を使用し、データベースの構造をモデル化すれば良いのですが、諸事情によりvisual studioの利用が難しい環境ですのでプログラム側を変更しなくて済むような別の方法を探しています…。
回答になってなかったら申し訳ありません…。
2021/07/25(日) 20:53:07.93ID:bu8XEemW0
それってテーブル設計に変更があったら過去のデータベースも変更するの?
そこ詰めといた方がいいよ
2021/07/26(月) 03:27:45.68ID:ScOxzw7A0
データベースが増えても構造が変わらない限りモデルは増えないけどどんなイメージをしてるのか気になる
2021/07/26(月) 03:31:43.27ID:2hg/H2MX0
新しいテーブルに既存のテーブルから正規化しつつ移行ってパターンで1回地獄見たな。
該当の既存のテーブルを、協力会社の古い基幹システムが使ってて、そっちが動かなくなった。
2021/07/26(月) 09:47:45.98ID:jSxCL2fC0
普通に作ってればDBの接続情報をプログラム内に固定でもってることなんてないと思うが

つか年度ごとに別DB作るとかそもそもの発想がもう普通じゃないかw
2021/07/26(月) 11:04:48.50ID:dSy+WV8fr
まあソースベタがきは確かにないやろな

色々冷静な判断が出来ない現場なんだろう、知らんけど
2021/07/26(月) 11:09:22.19ID:2hg/H2MX0
もしかしてパーティショニングの事を言ってる可能性。
2021/07/26(月) 11:11:01.52ID:oZRLaCWQM
年度毎にデータを残しておいていつでも出せるようにしてほしいみたいな客の言葉を
常識的なシステム設計を理解していないバカが鵜呑みにしちゃった結果だろ
ギョウムシステムにはよくあること
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況