1 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 12:02:50.03 ID:845Zva4M.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part122 echo.2ch.net/test/read.cgi/tech/1468078489/ ■関連スレ C#, C♯, C#相談室 Part91 echo.2ch.net/test/read.cgi/tech/1467142749/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/
32 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:37:21.76 ID:0ENkURmo.net] ん、悪いが意味がわからん。関係が多対多ならそういうものとして表現する必要があるだろう。 多対多のどこで困っているのか? >講師一人に対して生徒複数をn回繰り返してそのなかで生徒から講師を見たときに多対多が生まれてしまう 最初に講師の条件を指定しているんだからその条件を入れればそうはならんはず。 select * from A join B on B.x = A.x join C on C.y = A.y BとCの条件を忘れると結果がB×Cになってしまうという初歩的なミスに近い。
33 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:40:31.97 ID:SlcEPNYS.net] 多対多ってのは二つのエンティティ間のリレーション(+中間テーブル)の話 科目・講師・生徒ってのは三つのエンティティの話
34 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:46:32.00 ID:SlcEPNYS.net] とりあえずコード投下しとくわ public class 科目 { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public int id { get; set; } public string 科目名 { get; set; } public List<講師> 講師リスト { get; set; } public List<生徒> 生徒リスト { get; set; } public 科目() { 講師リスト = new List<講師>(); 生徒リスト = new List<生徒>(); } } public class 生徒 { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; } public string 生徒名 { get; set; } public List<科目> 科目リスト { get; set; } public 生徒() { 科目リスト = new List<科目>(); } } public class 講師 { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public int Id { get; set; } public string 講師名 { get; set; } public List<科目> 科目リスト { get; set; } public 講師() { 科目リスト = new List<科目>(); } }
35 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:46:48.57 ID:SlcEPNYS.net] class MyDbContext : DbContext { public DbSet<科目> 科目リスト { get; set; } public DbSet<生徒> 生徒リスト { get; set; } public DbSet<講師> 講師リスト { get; set; } public MyDbContext() { this.Database.Log = p => System.Diagnostics.Debug.WriteLine(p); Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>()); System.Diagnostics.Debug.WriteLine(this.Database.Connection.ConnectionString); } }
36 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:47:49.62 ID:SlcEPNYS.net] using (var db = new MyDbContext()) { db.科目リスト.Add(new 科目 { id = 1, 科目名 = "政治学" }); db.科目リスト.Add(new 科目 { id = 2, 科目名 = "経済学" }); db.科目リスト.Add(new 科目 { id = 3, 科目名 = "社会学" }); db.講師リスト.Add(new 講師 { Id = 1, 講師名 = "山田" }); db.講師リスト.Add(new 講師 { Id = 2, 講師名 = "田中" }); db.講師リスト.Add(new 講師 { Id = 3, 講師名 = "池上" }); db.生徒リスト.Add(new 生徒 { Id = 1, 生徒名 = "ジョン" }); db.生徒リスト.Add(new 生徒 { Id = 2, 生徒名 = "マイク" }); db.生徒リスト.Add(new 生徒 { Id = 3, 生徒名 = "ジェーン" }); db.SaveChanges(); 続く
37 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:48:13.11 ID:SlcEPNYS.net] //既存生徒、講師を持った新規科目の追加 var k = new 科目 { id = 991, 科目名 = "池上 特別講義" }; k.講師リスト.Add(db.講師リスト.FirstOrDefault(p => p.講師名 == "池上")); k.生徒リスト.AddRange(db.生徒リスト); db.科目リスト.Add(k); db.SaveChanges(); //生徒も講師も新規な新規科目 k = new 科目 { id = 992, 科目名 = "臨時講習会" }; k.講師リスト.Add(new 講師 { Id = 9921, 講師名 = "外部講師1" }); k.講師リスト.Add(new 講師 { Id = 9922, 講師名 = "外部講師2" }); k.生徒リスト.Add(new 生徒 { Id = 9921, 生徒名 = "外部聴講者1" }); k.生徒リスト.Add(new 生徒 { Id = 9922, 生徒名 = "外部聴講者2" }); k.生徒リスト.Add(new 生徒 { Id = 9923, 生徒名 = "外部聴講者3" }); k.生徒リスト.Add(new 生徒 { Id = 9924, 生徒名 = "外部聴講者4" }); db.科目リスト.Add(k); db.SaveChanges(); 続く
38 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:49:08.60 ID:SlcEPNYS.net] //外部講師1の全生徒検索 var ks = db.講師リスト.FirstOrDefault(p => p.講師名 == "外部講師1").科目リスト.SelectMany(p => p.生徒リスト); if (ks == null) return; foreach (var item in ks) { Console.WriteLine(item.生徒名); } これでまだ何かあるならもう知らん
39 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:49:21.54 ID:a7xaHxHC.net] >>36 ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ 参照しにくい上にレスの無駄遣いになる
40 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:51:10.96 ID:SlcEPNYS.net] ああ、最後に}が1個抜けた >>33 がエンティティ定義 >>34 がコンテキスト定義 >>35 からが操作側のコードな
41 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 19:51:36.36 ID:/2R1tIBn.net] ideone.com/TowsRy ideone.com/5bG0vs なんか間違ってたらスマンな。 ローカルでは普通に動いた。 中間テーブルにもデータが出来てる。
42 名前:40 mailto:sage [2016/07/31(日) 19:54:16.46 ID:/2R1tIBn.net] SaveChangesが2回入ってしまった。 途中のは消してもOK
43 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 20:02:32.08 ID:SlcEPNYS.net] >>38 すまん。次からそうする エンティティ定義だけでもここで示したかったんだ 勢いで全部張った 今では反省している
44 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 21:18:29.04 ID:hOdlxuRW.net] このコードって俺の関係でも使えるのかな
45 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 21:24:06.50 ID:hOdlxuRW.net] レスを見直してたんだけど 講師の人のだと外部キーとしてListBとCのどちらか必要ないってのは何故なんだろ 講師から見たら科目・生徒をそれぞれを紐付ける重要なファクターだと思ってしまう
46 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 21:33:38.39 ID:SlcEPNYS.net] >>44 講師生徒の話と、ABCの話を混ぜるなと 講師と生徒に直接の関係がないから、講師が生徒を持ってるのはおかしい あるいは A.ListBとA.C.LisstBが必ず同一なら、同一の情報を複数個所に持つ必要がない 同じことしか言ってないし、C#もLinqも関係ない話だからそろそろ終わりにしてくれ
47 名前:デフォルトの名無しさん [2016/07/31(日) 22:44:17.15 ID:KRNaJHTC.net] それにしてもセミの鳴き声がうるさいなw
48 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 02:30:05.89 ID:whHwDgoj.net] なんで切れてんだこいつ
49 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 11:01:28.50 ID:O5g9L92b.net] プログラミングでフラッシュっていったら初期化のことですか? それともデータを消すということなのか、いまいちわかりません
50 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 11:09:29.37 ID:9b8KRrTw.net] 人で例えると下剤を飲むカンジかな
51 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 11:17:47.86 ID:cs1OuQE6.net] トイレの流すボタンも英語でFlash書いてあるな まーバッファに溜まったもの全部処理して空にする
52 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 11:59:02.14 ID:yIP/hXrs.net] flush じゃなくて? Hattenが流れるトイレ
53 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 12:00:39.94 ID:3q+qs35i.net] >>48 flush はデータキャッシュの仕組みの一部 受け渡しを省いて貯めこんだデータを一気に吐き出す 大抵は少しずつ吐き出してるから気にしないことも多いけど これを忘れるとデータが行方不明になったりする Flash なら Web で主流だったマルチメディアのための技術 ただし既に寿命が尽きた
54 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 13:05:26.23 ID:0PxnJBWw.net] Flushは便所を流すもので、Flashは禿頭に輝きを足すものだ。
55 名前:デフォルトの名無しさん [2016/08/01(月) 13:24:33.39 ID:ju4FPINm.net] 髪の話をするな繰り返す髪の話をするな
56 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 14:31:00.92 ID:0PxnJBWw.net] >>53 Oh, Your head is Glitter! ※「髪」の話ではない。
57 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 16:30:14.78 ID:LUOh4w+m.net] dataSetクラスのRejectChangesメソッドについて質問です メロンパンの価格を105円から110円に変更した後にRejectChangesメソッドを使って変更前の105円に戻すサンプルコード書いてるのですが dataset.Tables["Table1"].RejectChanges();を実行させるとTable1の全データが空白になります dataset.Tables["Table1"].Rows[0].RejectChanges();と行を指定するとその行だけが消えて サイトに書いてるような編集前に戻すことができないのですがどこが間違っているのでしょうか ご教授ください okwakatta.net/code/dst12.html
58 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 16:30:50.61 ID:buiAh0Ub.net] >>52 ため込んだデータはそこにあるのになんでflushしないとデータが消えるんですか?
59 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 16:41:36.34 ID:LUOh4w+m.net] 自己解決しました dataset.Tables["Table1"].AcceptChanges();を変更したいコードの上に書けばよかっただけみたいです
60 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 17:14:31.62 ID:cesk8lNx.net] >>57 c#のメソッドの話ではないので スレ立てるまでもない質問はここで 143匹目 [無断転載禁止]©2ch.net echo.2ch.net/test/read.cgi/tech/1464139565/ に移動してください
61 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 19:33:00.40 ID:EwKQYn8n.net] >>48 フラッシュの意味が知りたいならバッファーとかキャッシュとかが なぜ必用になるのかを理解する必要がある。
62 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 20:05:09.44 ID:Pl/m9xU5.net] >>54 変な帽子〜
63 名前:デフォルトの名無しさん [2016/08/02(火) 01:47:26.69 ID:1tBm9uAw.net] 頭かゆい
64 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 08:11:40.81 ID:WvYs1Olo.net] >>50 トイレでFlash焚くと逮捕されますよ
65 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 17:02:17.62 ID:4WoLw3FF.net] Task.Factory.StartNew()を断続的に使用しているのですが、 何回も繰り返している内に遅くなってくるのは、なぜでしょうか? ちなみに、スレッドは2個以上立ち上がらないように、処理はしています。
66 名前:デフォルトの名無しさん [2016/08/02(火) 19:29:24.95 ID:zxqOD1qT.net] >Task.Factory.StartNew()を断続的に使用しているのですが、 >何回も繰り返している内に遅くなってくるのは、なぜでしょうか? Taskは確かに完了してんの? Task内の処理が遅くなるの?スケジューリングが遅くなるの? >ちなみに、スレッドは2個以上立ち上がらないように、処理はしています。 これはどうやってやってるの?
67 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:34:29.82 ID:PbRjMUHM.net] >>59 話が発展して他の言語の話になっただけだろ お前頭おかしいの?うっとうしいからこのスレから消えろ
68 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:44:08.05 ID:JEZ5M90/.net] でも話が冗長だったよね
69 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:46:44.78 ID:S5QMVoml.net] そもそもの質問が >プログラミングでフラッシュっていったら だったからなぁ… (普通はくだ質スレ案件)
70 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:49:24.49 ID:S5QMVoml.net] あ、前スレでPOSTがどうたらやってた人か? その続きってことか? (…なら追い出されて当然…とか言うとまたキレるからやめとこう)
71 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:50:29.93 ID:PbRjMUHM.net] 関連として出てきた話すらこっちのスレでどうぞっていうだろ? 9割C#の話で対比で別の言語の話が出たとしてもだ、自治もここまでくるとキチガイの域
72 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:51:01.29 ID:LBy6cWLg.net] >>68 だよな。
73 名前:デフォルトの名無しさん [2016/08/02(火) 19:51:07.63 ID:PbRjMUHM.net] >>69 (…なら追い出されて当然…とか言うとまたキレるからやめとこう) この一行いる?ww
74 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:52:16.33 ID:LBy6cWLg.net] >>70 9割C#の話で対比で別の言語の話が出たとしてもだ、自治もここまでくるとキチガイの域 >>ここまでくるとキチガイの域<< >>キチガイの域<< ・・・これがサイコパシーか。
75 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:53:16.80 ID:1biageaY.net] >C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください よろしくお願いします
76 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:53:58.84 ID:PbRjMUHM.net] 盛り上がってきた? ID:LBy6cWLg ID:LBy6cWLg は煽り屋だから絶対にレスは怠らないんだよな 反論しようかなぁ…
77 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 19:59:46.23 ID:LBy6cWLg.net] >>70 とりあえず、自分で調べて覚えていくといいよ。 ttps://msdn.microsoft.com/ja-jp/library/system.io.stream.flush(v=vs.110).aspx ttps://msdn.microsoft.com/ja-jp/library/system.io.stream.close(v=vs.110).aspx 例えばこれ。 機械翻訳で日本語が変だから、英語モードにして、マウスを英文に当てながら日本語訳と照らしあわせて読むと便利。
78 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:00:54.63 ID:PbRjMUHM.net] なんで俺が質問したことになってんのかなぁ…
79 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:01:50.48 ID:PbRjMUHM.net] 自治厨って何が楽しいんだろう? 話が弾めばそれでよくね?
80 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:03:01.77 ID:l2W1ufxp.net] いつもの連投君だからみんなスルーしてね
81 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:03:44.52 ID:LBy6cWLg.net] あぼ〜んしました。
82 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:09:29.37 ID:PbRjMUHM.net] どんな話題でも受け付けるのにflushの話もだめってちょっとおかしくね? flushとC#の関係で話弾ませばいいでしょ
83 名前:デフォルトの名無しさん [2016/08/02(火) 20:15:54.16 ID:PbRjMUHM.net] >>80 いっとくけど煽った事実を取り消すために質問に答えてもお前がまともな人間ではないことは確かだぞw こういう話題もいいんじゃね?的な提案に対してよくそれだけ舐めた口がきけるな
84 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:23:15.88 ID:PbRjMUHM.net] はい次w
85 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:37:36.46 ID:PbRjMUHM.net] >>79 違います、スレ進行は平和にいきましょう
86 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 20:46:08.44 ID:HL5T2dK4.net] >>81 その通りだから馬鹿は無視してレスすりゃいいんだよ。 だいたい言うまでもないが「○○の話題は禁止」なんてレスが一番非生産的でスレ違い。
87 名前:デフォルトの名無しさん [2016/08/02(火) 21:23:22.41 ID:zxqOD1qT.net] なんだいつものか とっとと死ねよ
88 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:24:28.86 ID:cFVAdB/l.net] 他人に文句を言うんじゃくて答えてあげればいいだろ 答えられないなら、質問の内容がこのスレにあっているか判断できてないんだから誘導した他の人に文句言うなよ 一般的な話なら他のスレでやったほうが詳しい人やわかりやすい説明できる人が多いだろ Flushの動作は実装に強く依存するから下手に具体的なこと書くと不正確だったり、当てはまらなかったりするんだよなあ C#レベルだと、「そういう決まりだから」が答え
89 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:44:17.44 ID:PbRjMUHM.net] 誘導してる奴こそ質問もしないし答えもしないし存在価値ないだろ… Flushについては俺はどうでもいいけどさ、Bufferとの違いが分からないくらいかな
90 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:52:45.92 ID:HL5T2dK4.net] 抽象的な答えはキャッシュを実体に反映させるのがflushって感じかな。 だから前も書いたけどそもそも何故どういう場面でキャッシュが必用になるか理解してないと 動作の意味を実感するのは難しいのかもしれない。
91 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 21:56:38.82 ID:PbRjMUHM.net] OS理解してないと言葉だけ見て色々考えても仕方ないんじゃない?
92 名前:デフォルトの名無しさん mailto:sage [2016/08/02(火) 23:30:14.10 ID:9ycx7XAc.net] つ ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net echo.2ch.net/test/read.cgi/tech/1469538912/
93 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 02:38:27.77 ID:FoKdYgy2.net] >>88 回答もせ
94 名前:ず暴言を吐き、質問しにくい環境を作り出すお前はそれ以下だぞ Flushとかキャッシュの考え方はOSというよりももっと一般的なものだな ソフト側で実装することもあるし、ディスクのミドルウェアとかでも使われうる技術 OSとかミドルウェアとかはさすがにスレチだから、そういうのも含めて誘導だろ [] [ここ壊れてます]
95 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 06:32:38.78 ID:hBXg68Dk.net] >>91 過疎スレへの誘導…嫌がらせ行為に他ならない こんな奴が批判されずにずっと粘着し続けてるんだな
96 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 07:22:04.65 ID:PM+UcDni.net] インスタンス化したクラス以外からオブジェクトを利用するにはどうすればいいのですか? 雰囲気としてはこんな感じのことがしたいのですが・・・・・ https://dotnetfiddle.net/Widget/nEDDet
97 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 08:39:40.08 ID:Ls2YKypB.net] void Ccc(Aaa a) { Console.WriteLine(a.i); } 普通はこうする
98 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 08:40:02.50 ID:ZXeq6keH.net] >>94 public void Ccc(Aaa aaa) { } と、定義する
99 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 11:17:14.95 ID:uW5WiLiF.net] 一応こっちでもいいよ。 public class Aaa{ public int I{get;set;} } public class Bbb{ public Aaa A{get; private set;} public Bbb(Aaa a) { A = a; } public void Ccc(){ System.Console.WriteLine(A.I); } } class Hello { public static void Main(){ // Here your code ! var aaa = new Aaa(); var bbb = new Bbb(aaa); aaa.I = 1; bbb.Ccc(); System.Console.ReadKey(); } }
100 名前:デフォルトの名無しさん [2016/08/03(水) 13:41:35.76 ID:m0rhFcyF.net] Attaching an entity of type failed because another entity of the same type already has the same primary key value. 主キーが二つあるってエラーなのかなこれ AがBクラスのリストを持っている構造でエラーが起きています
101 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 13:48:06.96 ID:v7zxzFcD.net] >>98 ソースが無いと、何をやろうとしてエラーになってるか分からないっす
102 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 13:50:12.58 ID:fyF/wT3P.net] value 値が重複
103 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:16:18.58 ID:8916Nt3B.net] キーのハッシュ値か何かが重複してるんじゃね
104 名前:デフォルトの名無しさん [2016/08/03(水) 14:21:55.96 ID:m0rhFcyF.net] やろうとしているのは、>>20 です。 コードとかあったり、またレスで参考になるのが多いので、三つの関係を二つの関係にして考え直したら詰まっているので聞きに来ました。 俺が持つ写真リスト、友人リストってのをなくして、 単純に写真と友人の関係で考えようとしています。 写真リスト:持っている写真 友人リスト:写真に写っている人達 写真1にはX, Y, Zが写っている 写真2にはX, Wが写っている 写真3にはX, Zが写っている 写真を写真DBに登録→映っている人を友人DBに登録って形にしようとしているところです。 写真DBに写真を登録する時には、紐付け対象の友人DBが存在しないので写真のみ登録して、 友人DBに友人を登録する時には、写真DBのIDを外部キーにしてどの写真の情報なのかも登録しようとしています。 そしたら、登録はできるのですが…友人を登録する時に関係のない写真に新規追加などがされて数が異常に増える問題が起きてしまいます。 mslaboratory.blog.eonet.jp/default/2012/05/entity-framewor-2c13.html を参考にして、写真一枚一枚のDBを抜き出して、UnchangedやAttachとか試みているけど効果がないorエラー頻発… ideone.com/e.js/CrtNh1 コードは必要そうなところを抜き出して書き直したやつが上
105 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:30:49.38 ID:m0rhFcyF.net] ちなみに参考にしたのは>>40 これを綺麗に書き直したかったけど俺にはできなかった…
106 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:35:24.88 ID:8916Nt3B.net] 写真に写っている人(1-X, 1-Y など)をレコードにして そいつが 写真ID と 友人ID をインデックスに持てば後は簡単な気がする テーブルは3つ(写真、友人、リンク情報)
107 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 14:49:42.49 ID:m0rhFcyF.net] >>104 三つ目のテーブルの話だよね それも考えたんだけど中間テーブルとかの話で勝手に作られるってあるみたいだから それを利用しようとして見たら本当にテーブルできてる ただ異常に値が増えるから困ってるってとこですわぁ…
108 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:01:58.98 ID:uW5WiLiF.net] 完全にDBの構造の話だな。。。 テーブルは「写真、友人、写真に友人が載っているリスト、写真に友人が載っているリスト詳細」で、定義は以下。 写真{ PK ID、 ファイル名 } 友人{ PK ID、 名前 } 写真に友人が載っているリスト{ PK ID、 FK 写真に友人が載っているリスト詳細のID、 } 写真に友人が載っているリスト詳細{ PK ID、 PK( FK 友人.ID、 FK 写真.ID ) } DBの正規化的には「写真に友人が載っているリスト」は有った方がいいが、 理解できないうちは作らなくてもいい。
109 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:03:02.84 ID:uW5WiLiF.net] >>105 先にテーブルを自分で作って、それをマッピングすればいいんじゃないの?
110 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:06:36.06 ID:pX27JEVl.net] >>103 >>40 だけど、中間テーブルのことは難しく考えなくてもいいんじゃない? せっかく勝手にORマッピングしてくれてるのだし。 書き直して動かないなら、やはりソースを見たいな。
111 名前:デフォルトの名無しさん [2016/08/03(水) 15:06:56.64 ID:m0rhFcyF.net] >>106-107 答えてくれてありがとう。 個人的な課題の話で、構造を書き換えるのが無理なんだわ… >>106 のはおそらくクラス設計からやり直せって話なんだろうけども、 今は課題に対してこのクラス設計でって話になっているから変えられない… >>107 も同様で、コードファーストなのでデータファーストに切り替えれないんよ
112 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:10:48.32 ID:fyF/wT3P.net] >>109 中間テーブルが作られるのは確かだけど、 それをコードから操作するためにはコード内に対応するエンティティが必要 ↓ 中間テーブルはフレームワークが勝手に作るのでコードからはエンティティの定義ができない ↓ 中間テーブルが欲しいなら、それにあたるエンティティを自分で作っておく(勝手に作らせない)のが正解 …となるように思うんだけど… 勝手に作られる中間テーブルって、 コードでList(IColelction)として保持しているデータをDBに保存するために フレームワークがフレームワーク自身のためにこっそり作っただけで、 ユーザーに使ってもらうために作ったものじゃないと思うんだよね…
113 名前:デフォルトの名無しさん [2016/08/03(水) 15:16:54.63 ID:m0rhFcyF.net] >>108 以前はありがとう ドヤアアアアアアアアアしたく
114 名前:てこっそりやってたけどできんかった コードは>>102 がほぼ全て データは他のところから取ってきているから書けんけどデータの取得方法だけが違うだけで内容としては変わってないと思う >>110 操作とかデータを取得することはできないってことなのかな 中間テーブルが作られるだけで意味ないとイメージすればよろしいのだろうか ただ、中間テーブル云々の前に 友人に写真リストを追加してDB保存すると、写真に新規追加される問題があるから この問題は解決しないといけないという現状。たぶんこの問題をクリアしないと結局次に進めない 中間テーブルって話ではないんじゃないかなってなってて、上の方のサイトを見てAttachとかやっていたところ [] [ここ壊れてます]
115 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:20:34.60 ID:RQkvsjZ7.net] 別手法で解決策を提示するのは相変わらず変わらんのだなwwwww
116 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:23:21.26 ID:PbSq5cfW.net] エラー自体ははっきりしてるので、、 ちょっと試しに単純なデータでも出るかやってみてよ
117 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:23:49.27 ID:uW5WiLiF.net] >>109 成る程、、、理解したw 変更できないってのはもどかしいけど、がんがれ。 ADO.NETの話だから専用スレがあったらソッチの方がいいかも知れんよ。 (スレ誘導ウザイ厨に補足されそうで嫌だけど)
118 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:25:59.10 ID:m0rhFcyF.net] >>113 データを写真以外でも良いから簡単な例でってことかな ちょっと組み換えてやってみるよ >>114 これってC#の話でなくその話なんか 最近C#始めたばかりでどれがどれでなんてわからんのよね
119 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:26:09.37 ID:uW5WiLiF.net] ID変えてまで変なこと言ってる。。。 あぼ〜んしますね。
120 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 15:28:12.51 ID:uW5WiLiF.net] 1対1 1対N N対1 N対N って感じで広げていく方が原因を追いやすい希ガス。
121 名前:デフォルトの名無しさん [2016/08/03(水) 15:58:47.02 ID:m0rhFcyF.net] 試しに超簡単な例でやってみたら問題なく動いた ただ、四層構造で今DBにデータ格納してるのだけどそれが原因なのかなって思ってきた… using( var db = new DbCntext ) { } 別のとこに存在する上記のコードで変更すると、関連するデータがすべて変わる雰囲気がある
122 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:24:27.25 ID:pX27JEVl.net] >>111 ちらっと見てみたけど、tmpImage取ってきてすぐAttachしてるのって何か意味あるのかな? (俺が無知なだけならスマンの) Images tmpImage = ( from d in db.ImagesInfo where d.Id == image.Id select d ).First(); db.ImagesInfo.Attach( tmpImage );
123 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:42:27.07 ID:m0rhFcyF.net] >>119 そこ考えているとこでどういう意味があるのだろうかは効果があってから考えようとしていた アタッチは接続的な意味があると思ってて取ってきたものに接続することで変更を許さなくするものだと勝手に思い込んでる 参考はこれ mslaboratory.blog.eonet.jp/default/2012/05/entity-framewor-2c13.html
124 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:43:39.18 ID:m0rhFcyF.net] 本当はimageを入れれば良いんじゃないかと思ってるのだけど入れると >>98 のエラーが出てくる どの値が被っているのかが全然わからない…
125 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:46:50.62 ID:bderv+bK.net] INNER JOINで条件ゆるくて同じPKが複数出てきてるんだろうけど EFの方をよくわからんからなあ、ちょっと勉強しないとな・・・
126 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:56:52.39 ID:m0rhFcyF.net] >>122 もしかしてなんだけど 写真リストが持つ友人リスト 友人リストが持つ写真リスト 写真リストが持つ友人リスト…ってループするから 1つ目の友人リストと、2つ目の友人リストが被って〜…とかありえるのかな 今回のやつで中間テーブルを使用せずに>>110 が言うようにするならどうすれば良いんだろう 写真リストは写真情報 友人リストは写真情報 同じ写真情報テーブルを持てば良いのかな それとも四つのクラスだろうか>>106 のような
127 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 16:58:53.32 ID:E+3fwoaI.net] >>121 Attachが必要なのって、今のcontext以外で作ったインスタンスと、今のcontextに紐付ける場合。 なので、今のcontextから取り出したインスタンスをそのままAttachしても意味無いと思う。
128 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:01:47.79 ID:m0rhFcyF.net] >>124 別のusing(var db = new .....)の中でのインスタンスと紐付ける場合に必要って認識で良いのかな
129 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:22:57.85 ID:fyF/wT3P.net] >>123 自分は >>104 に賛成 写真-友人のリンクを保存するテーブルが一つ追加されればいいはず そして、写真、友人それぞれのエンティティに相手のListはいらない リンクを表すエンティティを作って、お互いの関係についてはすべてそこで処理
130 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:27:13.60 ID:m0rhFcyF.net] >>126 それで今考え直してるところ。その三つ目のテーブルでおそらく 撮影情報テーブル 写真番号 被写体 1 X 1 Y 1 Z 2 X 3 Y 3 Z こんなテーブル作るって意味よね。 この場合このテーブルには写真と友人のリストを持たせる そして写真と友人の相互のリストを消し去る ってのは問題なくできそうなんだけど関係性を繋げるキーってなにか設定いるかな 写真番号と被写体はそれぞれのテーブルの外部キーになるとは思うのだけども
131 名前:デフォルトの名無しさん mailto:sage [2016/08/03(水) 17:36:00.46 ID:fyF/wT3P.net] こうじゃない? PcitureクラスとFriendクラスを結びつけるとして、 class Relation { public int PictureID { get; set; } public int FriendID { get; set; } } class PictureFriendContext : DbContext { public DbSet<Picture> Pictures { get; set; } public DbSet<Friend> Friends { get; set; } public DbSet<Relation> Relations { get; set; } }
132 名前:デフォルトの名無しさん [2016/08/03(水) 17:41:19.97 ID:m0rhFcyF.net] >>128 おおわざわざありがとう ideone.com/DiTuFt 一応俺も書いてみたけど少し違うね…ここはリストで持つ必要や、写真・友人との関連性は必要ないのかな リストだとまた変な感じになるのか… そのPictureIdとかは重複を許すってので合ってるよね