[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/03 02:41 / Filesize : 281 KB / Number-of Response : 1021
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2016/07/10(日) 00:34:49.34 ID:2YnnBC7F.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part121
echo.2ch.net/test/read.cgi/tech/1465958068/

■関連スレ
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/

922 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:03:54.83 ID:crIAC8Sk.net]
reqStream.write

リクエスを送る流れに書き込む。
これでデータが送られないと思う理由が分からなん。

御託はいいからアドレス晒してよ。

923 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:05:06.31 ID:0RZw9HDW.net]
釣りじゃないなら
一度メンタルの病院行った方が良いんじゃないかな
割と本気で

924 名前:デフォルトの名無しさん [2016/07/30(土) 03:10:04.37 ID:6eJMfqp8.net]
釣りに決まってんだろm9

925 名前:デフォルトの名無しさん [2016/07/30(土) 03:11:48.37 ID:ukjq/gdc.net]
>>908
釣りと思う理由は?

926 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:13:58.90 ID:crIAC8Sk.net]
>>909

こいつ「ID:ukjq/gdc」が「釣れてると思って喜んでる」のを「あや釣る」のも面白いんだよwww

927 名前:デフォルトの名無しさん [2016/07/30(土) 03:17:44.12 ID:ukjq/gdc.net]
>>899の人はCloseで送信処理している!と言っていて
>>907ではWriteで送信処理まで終わっているといってますね
意見が分かれちゃった、この時点で有意義な質問だったと思えますが…

928 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:20:32.60 ID:crIAC8Sk.net]
>>912
送信処理まで終わっているといってますね

どこに?

929 名前:デフォルトの名無しさん [2016/07/30(土) 03:22:02.11 ID:ukjq/gdc.net]
>>913
reqStream.write

リクエスを送る流れに書き込む。
これでデータが送られないと思う理由が分からなん。

930 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:28:13.89 ID:crIAC8Sk.net]
>>914


>「リクエスを送る流れ」に「書き込む」。
>これで「データが送られないと思う理由」が分からん。

あなたの認識が正しいなら、
「データが送られない」=「送信処理まで終わっている」?

日本語のお勉強をし直しては。



931 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:41:03.36 ID:ukjq/gdc.net]
System.IO.Stream reqStream = req.GetRequestStream();
なんだrequest用のストリームか、ここでreq仕様にしてるのか

932 名前:デフォルトの名無しさん [2016/07/30(土) 03:42:07.56 ID:ukjq/gdc.net]
>>915
だから送られるタイミングですよ
あなたの言い方だとWriteした時点で送信されるみたいに捉えられますよ

933 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:53:53.45 ID:crIAC8Sk.net]
あなたの言い方だとWriteした時点で送信されるみたいに捉えられますよ

>「だから送られるタイミングですよ」
>「送信されるみたいに捉えられますよ」

どこらへんでそう捉えたの?

「だから送られるタイミングですよ」

これはあなたが今しがた(今も?)疑問に思っていたことって意味ですか?

934 名前:デフォルトの名無しさん [2016/07/30(土) 04:02:28.99 ID:ukjq/gdc.net]
だめだこの人
揚げ足取ることしか考えてないね
こっちは単にStreamの疑問知りたいだけなのにさ…
なんか残念です、まー>>899が正解ってことならそれでいいです

935 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 04:02:46.60 ID:4BSXkGIU.net]
すんゲー伸びてると思ったらまた例の人かよ
C#に関係ない質問を延々と続けられると迷惑
もう次スレのテンプレに触るなって書いたほうがいいな

936 名前:デフォルトの名無しさん [2016/07/30(土) 04:54:15.58 ID:mo3DDFsV.net]
>>827
Cに関しては本当にそうなんでしょうね。

Cを本格的に学ぼうとするとそら大変なんでしょうけど
プログラミングの仕組みを理解する上では
つまり浅い段階の理解についてはC関連のものが分かりやすかったもんで

C#は逆に海外のサイトとかの方がわかりやすいかもですた
とりあえず形になるよう頑張ります

937 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 04:54:55.79 ID:crIAC8Sk.net]
>>919
>こっちは単にStreamの疑問知りたいだけなのにさ…

じゃあ、お望み通り正しく説明します。

1.Streamというのは流れという意味の単語です。
2.RequestStreamというのは「リクエストが流れる」ものです。
3.RequestStreamのインスタンスにリクエストを書き込むにはWriteメソッドを呼び出します。

4.Writeメソッドが呼び出されたからといって、即座にリクエストが流れるとは限りません。

5.ただし、リクエストが即座に流れることも有ります。
5-1.即座に流れる場合は、RequestStreamのバッファー領域がリクエストする情報より小さい時です。
5-2.加えて、RequestStreamのAutoFlush(自動洗浄)が有効な場合です。

6.プログラマーは、任意のタイミングでRequestStreamをFlushして、随時リクエストを送信を促すことも可能です。
6-1.多くの場合はFlushするとリクエストは即座に送信されます。
6-2.しかし、RequestStreamの実装の如何によって、即座に送信されないこともあります
6-3.これはRequestStreamを実装した側の都合によって、適切に無視することが許されているからです。
6-4.故に、このFlushを用いてリクエストが今送信されたかどうかをプログラマーが気にすることは愚かです。

7.RequesStreamは、リクエストストリームをこれ以上使用しなくて良い段階に来た際には、Closeメソッドを呼び出す必要があります。
7-1.Closeメソッドを呼び出した際にバッファーが空でなかった場合の挙動は、言語やその言語のジャージョンによって異なります。
7-2.例えば、(黎明期のJavaなどは)Flushしていないデータが欠落することなどもあり得たわけです。
7-3.ただし、C#であればCloseをすれば問題なくリクエストの送信は開始され、やがて終了します。
7-4.故に、このCloseを用いればWriteしたタイミングでリクエストが流れているかいないのか、はたまた
    Flushしたタイミングでリクエストが流れているのかいないのか、
    気にしなくとも良いのです。
7-5.但し、膨大なリクエストを逐次的に長い期間にかけて渡さなければならないような場合には、
    Flushを行いながら処理を行っていく必要があります。

938 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 04:59:45.17 ID:crIAC8Sk.net]
>>922
「ID:ukjq/gdc」と「ID:mo3DDFsV」の質問は向こう1日間は受け付けません。
質問する前に、一旦落ち着いて整理して下さい。その後縁があって質問があれば、回答を行います。

939 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 07:44:01.40 ID:SD9Rxi9F.net]
>>825
自分から勉強しようと思う気持ちがないと続かないよ
別にプログラマーに限ったことじゃないけど

940 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 08:40:01.82 ID:RyCiYMxC.net]
dobon.net/vb/dotnet/internet/webrequestpost.html
は、もう新規の人には紹介しない方が良いのでは。

HttpWebRequestは古臭い仕様で面倒臭い。
今から覚えるのなら、便利で分かりやすいHttpClientの方が良いだろう。



941 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 08:41:01.11 ID:RyCiYMxC.net]
.NET TIPS:
HttpClientクラスでWebページを取得するには?[C#、VB]
www.atmarkit.co.jp/ait/articles/1501/06/news086.html

942 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 09:03:14.71 ID:RyCiYMxC.net]
しまった、>>926はPOSTしてないから適切じゃなかった。
HttpClientは、まだ解説がしてるところが少ないのが難点だね。特に日本語の。

Web API よりも HttpClient に注目したい(しばやん雑記)
blog.shibayan.jp/entry/20120822/1345563275

943 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 10:31:45.32 ID:uyw/q1V9.net]
おはよう
>>919
本当に釣りじゃないんだな?
それならとりあえずここに来い
俺がここで相手してやるから
echo.2ch.net/test/read.cgi/hp/1468250963/

APS.NETの前にHTTP、HTMLの基本を覚えた方がいい

944 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 11:17:49.72 ID:ukjq/gdc.net]
仕事(プログラマではない)でWireshark使ってるんでパケットの流れには興味あるんです
釣りでは決してありません
>>922
詳しいレスありがとうございます。


5.ただし、リクエストが即座に流れることも有ります。
5-1.即座に流れる場合は、RequestStreamのバッファー領域がリクエストする情報より小さい時です。
5-2.加えて、RequestStreamのAutoFlush(自動洗浄)が有効な場合です。

でもなぜこんな詳細に分かるのかというか、どういう本読めば分かるんですか?

6.プログラマーは、任意のタイミングでRequestStreamをFlushして、随時リクエストを送信を促すことも可能です。

とめてから一気に送るみたいな安全なコードもかけるんですね、でしたらそのコードみてみたい


故に、このFlushを用いてリクエストが今送信されたかどうかをプログラマーが気にすることは愚かです。
????????
知りたい場合は?

945 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 11:18:22.50 ID:ukjq/gdc.net]
>>928
もうHTMLの話はしない

946 名前:デフォルトの名無しさん [2016/07/30(土) 11:28:06.60 ID:xUJaRIFl.net]
C#を取り扱っている先輩方、ご質問があります。
今、SQLserverのDBを用いてコーディングしています。その時に、双方向にそれぞれのリストを持たせた場合、
多対多の関係になると学びました。また、そのコードを記述し動かすと自動で中間テーブルを作り、
1対多、(中間テーブル)、多対1の関係性をDBに作ってくれるまでできました。
ただ、中間テーブルを作成したものの値が入りません…何かアドバイスお願いします。

public class A {
public int Id {get;set;}
public List<B> b;
}

public class B {
public int Id {get;set;}
public List<A> a;
}

static void main(){

A a = new A(){};
a.b.Add( new B { Id = 1 });

B.b = new B(){};
b.a.Add( new A { Id = 1 });
}


このようなクラスで中間テーブルまでは作成されます。
NULLの原因としては、AではBのリストを、BではAのリストをnewで入れてないからなのかなとは思うのですが、
new A { Id = 1, <bのリストに値を入れる記述> }
上記の<>で挟んだ部分をなんと記述したらいいのかわからないです…

947 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 11:47:47.91 ID:5Lcdfshx.net]
>>931
単にクラス定義をこうするだけではダメかな?

public class A {
public int Id {get;set;}
public List<B> b = new List<B>();
}

public class B {
public int Id {get;set;}
public List<A> a = new List<A>();
}

948 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 12:02: ]
[ここ壊れてます]

949 名前:50.80 ID:UF7V38Hh.net mailto: >>932
あ、すみません
コンストラクタでのnewを記述し忘れていました
それは問題ないです。またつまっているところが違ったと気付いたので、今から書き直してみます…
[]
[ここ壊れてます]

950 名前:デフォルトの名無しさん [2016/07/30(土) 12:11:56.19 ID:gt3sWNMS.net]
public class C {
public List<A> a;
public List<B> b;
}

public class A {
public int Id {get;set;}
public List<B> ListB;
public C c; // 外部キー
public A(){ b = new List<B>();}
}

public class B {
public int Id {get;set;}
public List<A> ListA;
public C c; // 外部キー
public B(){ a = new List<A>();}
}

CがAとB、AがB、BがAのリストを持っている構造にしたいです。
その際に、CにAddする時に、

static void main(){

C c = new C();
c.a.Add( new A { Id = 1, ListB = ????? });
}

< Cの持つリストa >に情報を入れる時の< ListB >の部分で詰まっています。ここをうまく解決できれば、中間テーブルにも
値が入るのではないかなと考えています。
List<B> tmpB = new List<B>();で定義したtmpBを入れてみても中間テーブルに値は反映されていませんでした。
A, B それぞれに、それぞれの外部キーを設定する必要があるとかでしょうか?



951 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 12:21:23.10 ID:5Lcdfshx.net]
>>934
一旦シンプルにしたほうがいい。
クラスCの定義が変だと思う。

//これはAとBの関係を保つためのクラス
public class C {
public A a;
public B b;
}

public class A {
public int Id {get;set;}
}

public class B {
public int Id {get;set;}
}

952 名前:デフォルトの名無しさん [2016/07/30(土) 12:32:22.73 ID:VbvJ+5P0.net]
>>935
つまり、Cはa, b に関係を持つが集約の関係性ってのがおかしいってことでしょうか
一応、そこの関係性は崩せると思いますが、ABの関係性は崩すと大きくクラス設計に関わってきそうです…

public class C {
public A a;
public B b;
}

public class A {
public int Id {get;set;}
public List<B> ListB;
public C c; // 外部キー
public A(){ b = new List<B>();}
}

public class B {
public int Id {get;set;}
public List<A> ListA;
public C c; // 外部キー
public B(){ a = new List<A>();}
}

static void main(){

C c = new C();
c.a = new A { Id = 1, ListB = ????? };
}

953 名前:デフォルトの名無しさん [2016/07/30(土) 12:34:07.18 ID:VbvJ+5P0.net]
連投ですみません。
どちらかと言うと、多対多で中間テーブルが自動生成させるのを達成したい感じです…
この状況で A B C のテーブルは自分で作ることになりますが、
A B の中間テーブルは自動で作られると思うので…

954 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:07:12.61 ID:RyCiYMxC.net]
>>934
c.a.Add( new A { Id = 1, ListB = c.b });
でダメなのかい。

後、
c.a = new List<A>();
c.b = new List<B>();
も抜けてそうだけど。

955 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:27:18.34 ID:cua4PELF.net]
ListのインスタンスをA,Bのコンストラクタで作る(A,BのインスタンスごとにListを持つ)つもりのようだけど
作ったListにはどんなAやBをAddしていくつもり?

AはBのListを持ち、そのListに入るBを作るにはAのListを作りそのAのListに…
…となると終わりはないけど、リストが空でも問題ない?
空で問題ないなら、new A するときに ListBに何かする必要はない
(というか、ListB = ??? とかしちゃうと、Aのコンストラクタでの new List<B>()が無駄になるよ)

956 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:27:52.31 ID:NxOPfq9t.net]
>>929
漏れらは、何十冊も本を読んでいるから、よく知っている。
素人の知識・勉強量では無理。どの資格にも受からない

皆Linux板では、SSDへの書き込み回数を減らして、寿命を延ばすため、
通常は5秒毎にフラッシュされるところを、15〜30秒にしている人も大勢いる

システムが信用できないからって、システム終了時に5分かけて、フラッシュを3回やってから、
電源を切っている人もいるくらい

OSに書き込み要求を出すというのと、デバイスが書き込んだあとに、
知らせてもらうというのは異なる。
常に、デバイスが本当に書き込んだかどうかを、疑うべき

957 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:59:52.29 ID:vwndqmNO.net]
>>938
まさにそこです

>>939
そうなるんですよね
別に空でも問題ないです
ヌルも許容する予定なので

ただ…それだと中間テーブルには値が入らず…ってなるので
何をどうしたらいいのかわからないってなっているところです

958 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 14:35:50.97 ID:cua4PELF.net]
>>941
AのListBにはどんなBを、BのListAにはどんなAを入れるつもり?
それがはっきりしないと、前には進まないような…

それと…
…ごめん、こちらが勉強不足だからだけど

>双方向にそれぞれのリストを持たせた場合、
>多対多の関係になると学びました。

って、どういうことだろう…
今やってるみたいに、モロにお互いを循環させることなのかな…?

あと、
>また、そのコードを記述し動かすと自動で中間テーブルを作り、
>1対多、(中間テーブル)、多対1の関係性をDBに作ってくれる

というそのコードがネットで見れるのなら、それを教えてほしいんだけど…

959 名前:デフォルトの名無しさん [2016/07/30(土) 14:42:59.78 ID:kE9N+QT2.net]
>>941
AとBは講師と学生の関係ですね
講師は複数の学生を教え、学生は講師を複数持つ
みたいな関係にするために多対多になっています
講師1に対して学生A,B,C,Dを検索でき、学生Aに対して講師1,2,3を検索できるような感じです

コードファースト開発を行っていてどこかで見たんですよね…。ただ、今回の内容については書いてなかったんです。
実際データベースにアクセスしているのは、三つしかないんですけど、
4つ目の講師・学生のIDを照らし合わせたテーブルも生成されます。
試しにコーディングしてSQLServerに繋げてみると謎のA・Bのテーブルが出来るとおもいます

960 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 14:44:17.66 ID:crIAC8Sk.net]
public class C {
  public List<A> a;
  public List<B> b;
  public C(){ a = new List<A>(); b = new List<B>();}
}

public class A {
  public int Id {get;set;}
  public List<B> ListB;
  public C ListC{get;set;} // 外部キー
  public A(){ ListB = new List<B>();}
}

public class B {
  public int Id {get;set;}
  public List<A> ListA;
  public C ListC{get;set;} // 外部キー
  public B(){ ListA = new List<A>();}
}

int id = 0;
C c = new C();
c.a.Add(new A{Id = ++id, ListC=c});
c.b.Add(new B{Id = ++id, ListC=c});

こんなんかな。。。何がしたいのかは想像できず^^;



961 名前:デフォルトの名無しさん [2016/07/30(土) 14:45:01.77 ID:kE9N+QT2.net]
www.atmarkit.co.jp/fdotnet/ef4basic/ef4codefirst02/ef4codefirst02_02.html
ここの話ですね。ただデータ追加などについて調べても出てこないという現状です

962 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:10:28.22 ID:cua4PELF.net]
>>945
そういうことなら
1.A、BのList(それぞれlistA、listB)をつくる
2.listA、listBのそれぞれにA、BのインスタンスをAdd
  (この段階でのA、BそれぞれのListB、ListAの要素は空)
3.listAの各AのListBにlistBからランダムに選んだBをAddして、
   同時に、選んだBのListAに追加先のAをAdd
…で、いいんじゃないかな?

963 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:20:04.96 ID:cua4PELF.net]
こんな感じ?
List<A> listA = new List<A>();
List<B> listB = new List<B>();

for (int i = 0; i < 30; i++) //とりあえずどっちも30
{
 listA.Add(new A { Id = i });
 listB.Add(new B { Id = i });
}

Random rnd = new Random();

foreach (A a in listA)
{
 foreach (B b in listB)
 {
  if (rnd.Next(2) == 1)
  {
   a.ListB.Add(b);
   b.ListA.Add(a);
  }
 }
}

964 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:21:01.60 ID:crIAC8Sk.net]
>>943
成る程、もともと凄くいい線いっていたと思うよ。敢えて日本語でやったので、元のa/b/cと対応させてみて欲しい。
味噌はthisじゃないかしら。

public class キー {
  public List<講師> 講師陣;
  public List<学生> 学生達;
  public void Add(講師 追加する講師, 学生 追加する学生) {
    追加する講師.外部キー = this;
    追加する講師.教えてる学生達.Add(追加する学生);
    講師陣.Add(追加する講師);
    
    追加する学生.外部キー = this;
    追加する学生.師事する講師達.Add(追加する講師);
    学生達.Add(追加する学生);
  }
  public キー(){ 講師陣 = new List<講師>(); 学生達 = new List<学生>();}
}

public class 講師 {
  public int Id {get;set;}
  public List<学生> 教えてる学生達;
  public キー 外部キー{get;set;}
  public 講師(){ 教えてる学生達 = new List<学生>();}
}

public class 学生 {
  public int Id {get;set;}
  public List<講師> 師事する講師達;
  public キー 外部キー{get;set;}
  public 学生(){ 師事する講師達 = new List<講師>();}
}

965 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:22:48.83 ID:crIAC8Sk.net]
>>948
int id = 0;
var 参照キー = new キー();
var 講師A = new 講師{ Id = ++id };
var 講師B = new 講師{ Id = ++id };
var 学生A = new 学生{ Id = ++id };
var 学生B = new 学生{ Id = ++id };
var 学生C = new 学生{ Id = ++id };

// 学生Aは講師Aの生徒、学生Bは講師Bの生徒、学生Cは講師Aと講師Bの生徒

参照キー.Add(講師A, 学生A);
参照キー.Add(講師B, 学生B);
参照キー.Add(講師A, 学生C);
参照キー.Add(講師B, 学生C);

966 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:50:04.23 ID:crIAC8Sk.net]
すまん。

外部キーが間違ってるね>俺
これ多分、学生/講師の、外部キーがまるっと要らない。
多対多の関係を付けるだけなんでしょ???

ideone.com/6VOBUg

967 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 16:26:38.39 ID:Nl6hflxM.net]
中間テーブルが自動作成とか、Entity Frameworkでコードファーストの話か?

968 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 16:56:54.46 ID:zScUrdBS.net]
>>946
やはりそうなりますよね
それしか思い付かず…しかもこれ永遠ループするんじゃないかなと思ってます
リストAの中のBの中のAの中の…と

>>947
ネクストって知らない関数なので家についてから見させていただきます
ありがとうございます

>>948
>>950
すごく長いコードありがとうございます
上と同じく家についてから見させていただきます
thisの関係など詳しく見る必要がありそうです

そちらのコードで言うキーを外部キーにしているところは、
最後に使う予定があるので残しておこうかと考えてます
今回困っているところは言われている通りリレーションなどです

>>951
まさにそれです
自動作成される中間テーブルがあるのですが
そこに要素が入らなくて何故かなと…

969 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 19:53:40.78 ID:qHhyCsUA.net]
>>952
合ってるか分からないけど、Listじゃなくて、ICollection型のvirtualなプロパティ書かないといけないんじゃない?

970 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 20:28:38.81 ID:Nl6hflxM.net]
>>952
その場合は、クラスAの定義にBの外部キーとなるための項目(BId)が必要なはず
クラスBにもAへの外部キー(AId)が必要



971 名前:953 mailto:sage [2016/07/30(土) 22:10:21.29 ID:Nl6hflxM.net]
n:nのリレーションだったな
>>954はとりあえず忘れて
軽く試してみたけど、EF6.1.3だとちゃんと中間テーブル作成されて値も入る
(IDがオートナンバーになったから、指定した値ではないが)

DbContextの定義とデータ追加してるコードどっかに晒してみたら?

972 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 23:10:44.57 ID:flo7DdHH.net]
.net 4.0 4.5 4.5.1は既にサポート終了してたんだな。2.0はシェアの多さからまだサポート続いてるな。

973 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 23:18:52.42 ID:3zYE6jXl.net]
>>956
4.5ならともかくうちの会社は4.0のアプリが多いから互換チェックが大変だわ

974 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:28:55.80 ID:fxXPyGX0.net]
C#って配列を初期化しないとエラーがでるけど、これって初期化してからじゃないと
配列の実態を生成できないからでしょうか?C言語だとint a[100];の時点で作られるから
エラーがでないと思ってますけどそういうことでしょうか?

975 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:49:03.77 ID:DiaxdW8Z.net]
>>958
値型の配列を参照型の配列の違い
C#でも
fixed char name[30];
を使えば値型配列を作れる(ただしC等とのDLL連携用に作られたものなので普通はしない)
{"a","b","c"}を例にすると画像みたいになる
sssp://o.8ch.net/ewpj.png

976 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:49:48.65 ID:VGHB1MRw.net]
初期化という言葉はC#では意味が曖昧になる状況が多いから、正しく理解するまでは使わないほうがいい
C#で配列を作るとき
int[] a = new int[100];
1-1. int[]型のローカル変数aを確保する。
1-2. int[]型で100要素をもつ配列オブジェクトを生成する。このとき要素の値はすべて既定値(0)で自動的に”初期化”される。
1-3. 1-2.で作ったオブジェクトの参照をaへ代入する。
Cならこうだ
int a[100] = {0};
2-1. int[100] 型のローカル変数を確保する。この時点で100要素分確保されている。
2-2. aの全要素を0で”初期化”する。

で、>>958が初期化と呼んでいるのは(1-2.+1-3.)と2-2のことだろう。
これを理解してれば何も不思議はないはず。

977 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:52:22.29 ID:DiaxdW8Z.net]
ちなみに文字列型は参照型だから上みたいになるけど、値型ならこうなる
ここでは例として{1,2,3}を使う
sssp://o.8ch.net/ewpn.png

978 名前:デフォルトの名無しさん [2016/07/31(日) 10:22:20.63 ID:fxXPyGX0.net]
>>959
Cの場合スタックとヒープで容量いっしょ?www
C#との違いに驚いた

979 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:30:11.19 ID:JeOzAbnd.net]
sssp見えない

980 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:32:05.95 ID:DiaxdW8Z.net]
スタックは仕組み上固定長じゃないと駄目な訳
構造体が継承できないのもそこら辺の問題

もし値型が継承しちゃったら固定長じゃなくなるよね?



981 名前:デフォルトの名無しさん [2016/07/31(日) 10:38:24.44 ID:fxXPyGX0.net]
>>959
あ読み間違いか
ヒープ領域にa,b,cがあるかと思った
→ってことねw

982 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:42:24.41 ID:DiaxdW8Z.net]
>>965
ヒープ領域にa,b,cがあるよ

スタックは固定長じゃないといけないのに、もし文字列にスタックがあったら
string s="a";
s="aa";
みたいな事したらぶっ壊れるぞ

983 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:46:58.10 ID:VGHB1MRw.net]
>>964
んなことはない
C99ならスタックに可変長配列置けるぞ
そもそもスタックはコールスタックという可変長のデータ領域を扱うためのものなんだから仕組み上何も無理はない

984 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:50:21.98 ID:DiaxdW8Z.net]
>>967
あ、マジで
すまん俺の勘違いだわ

985 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:54:01.04 ID:fxXPyGX0.net]
>>966
え?…
Cのほうが納得できない
char[3];
char[1]に文字が入ってると思うんですけど?
だってポインタではないんだから

986 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:59:59.51 ID:DiaxdW8Z.net]
>>969
文字じゃなくて文字列
"a"は文字、'a'は文字列

987 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:00:21.69 ID:DiaxdW8Z.net]
ごめん逆
"a"は文字列、'a'は文字

988 名前:デフォルトの名無しさん [2016/07/31(日) 11:02:36.94 ID:fxXPyGX0.net]
>>970
あ文字列ならポインタってことになるけど
ポインタの場合はスタックは1個では??
なんで3個あるんでしょう?それが謎

989 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:06:42.62 ID:nqVHC6AT.net]
Cの話は他のスレで

990 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:07:17.06 ID:VGHB1MRw.net]
>>972
{ "abc" }なら文字列一個だけど{"a","b","c"}なら文字列3個でしょ



991 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:08:30.96 ID:DiaxdW8Z.net]
>>972
スタックに"a"へのポインタ、"b"への"ポインタ、"c"へのポインタが詰まれている

992 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:09:22.00 ID:fxXPyGX0.net]
配列が出てきたから勝手にそれで文字列を実現するって解釈してしまったなぁ
すいません

993 名前:デフォルトの名無しさん [2016/07/31(日) 11:09:59.85 ID:fxXPyGX0.net]
>>974
なるほど文字列3つってことですね
勝手に文字列を実現するみたいな解釈してました
"abc"ではないんですねすいません失礼しました

994 名前:デフォルトの名無しさん [2016/07/31(日) 11:26:30.84 ID:tdu9NojY.net]
おはようございます。930です。今からコードを見直してみようと思います
>> 953
ちなみにdb.Entry(student).State = EntityState.Unchanged;みたいなのしていますか?
これをしないと片方の追加だけなのに、もう片方に新規で追加されていきます。DBcontextをまとめた処理が
public DbSet<Subject> SubjectInfo { get; set; } public DbSet<Teacher> TeacherInfo { get; set; } public DbSet<Student> StudentInfo { get; set; }

追加時は下記です。
public Teacher Create( Teacher teacher ) {
Teacher newTeacher;
using( var db = new DbContext() ) {

// 外部キーで設定している科目と関連付ける処理
User subject = ( from d in db.SubjectInfo where d.Id == Teacher.User.Id select d ).First();
db.Entry( subject ).State = EntityState.Unchanged;

newTeacher = new Teacher { Name = teacher.Name,
Subject = subject,
studentLists = teacher.studentLists // これを入れるとMultiplicity constraint violated.
// db.Entry(???).State = EntityState.Unchanged;でエラー
};
if ( newTeacher.studentLists != null) {
foreach ( Student student in newTeacher.studentLists ) {
// db.studentInfo.Attach( student );
// db.Entry( student ).State = EntityState.Unchanged;
}
}
// アクセスするところを紐づける
GetTable( db ).Add( newTeacher );
db.SaveChanges();
}
return newTeacher;
}

995 名前:デフォルトの名無しさん [2016/07/31(日) 11:30:03.17 ID:tdu9NojY.net]
新しい作成される中間テーブルにデータが入ってなかった理由は、
newTeacherを作っているときに、studentLists = teacher.studentListsを入れてなかったからだとは思ったんですが、
そうすると今度は片方のテーブルに影響を与えない…って処理でエラーが出るように。

アドバイスを頂いたところは今から見直します

996 名前:デフォルトの名無しさん [2016/07/31(日) 11:41:40.57 ID:9Z6DmbVF.net]
ハイ次w

997 名前:デフォルトの名無しさん [2016/07/31(日) 11:47:57.52 ID:tdu9NojY.net]
連レスですみません
これって、講師と学生を単純に考えた場合、講師を先に入れると学生のデータはなく、学生を先に入れると講師のデータがない。
そのような状況になると思います。
その時に、中間テーブルには講師のデータはあるけども…!学生のデータがない!関連付けれない!となるのでしょうか。
そのため、DBに値が入る順序としては、講師のデータが入る→学生のデータが入る→中間テーブルに関連する値が入る
こういう認識で良いのですかね

>>947
やりたいこととしてはそんな感じです。
その際に、中間テーブルに値を入れたい…!って状況です

>>975
一番包括するキーのクラスでAddを定義する感じでしょうか。
今コードを見てみたのですが、外部キーをそこで設定する必要がないのかなと思っています。(thisのとこ)
先に教えている学生を生成し追加して、講師に追加する…というところは参考にさせて頂きました。
そのおかげで、テーブルには入る様になりました!
ただ、>>978のようなエラーが出てきました…

998 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:57:52.20 ID:KfDsWSu1.net]
>>981
次スレよろ。

で、0..n対0..nの関係なら、生徒を持ってない講師が居ても良くて、中間テーブルにその講師は登場しないはずだよ。

999 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 12:12:35.28 ID:nqVHC6AT.net]
あれ?立てたのは別の人なのか?案内もないし

ふらっと C#,C♯,C#(初心者用) Part123 [無断転載禁止]©2ch.net
echo.2ch.net/test/read.cgi/tech/1469934170/

取り合えず立てた人乙

1000 名前:デフォルトの名無しさん [2016/07/31(日) 12:16:36.38 ID:tdu9NojY.net]
別回線で立ててコーディングに夢中で案内忘れていました…

>> 981
NULLを許容するかしないかって話ですよね
自分もそう思っているのですが…

DB扱うのって本当に難しいですね…



1001 名前:デフォルトの名無しさん [2016/07/31(日) 12:21:48.88 ID:9Z6DmbVF.net]
取り合えず立てた人チーすw

1002 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 13:03:24.52 ID:4EU300F7.net]
俺も良くわかってないが双方向でリストを持っているときっていつそれぞれのを結びつけるんだ?
それとも結びつけなくていいのか
Aを追加するときにBは居ないし逆もまた然りって永遠ループが頭の中で続くわ

1003 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 13:35:00.89 ID:4EU300F7.net]
書かれていることやろうとしても中間テーブルみたいなのは無理にとおせばできるけど
無限増殖問題か値が入らない問題が起きるぞ
なんで
>>954はできるんだ?コードが見てみたいんだが

1004 名前:デフォルトの名無しさん [2016/07/31(日) 13:39:55.24 ID:tdu9NojY.net]
>>953
レスを返し忘れていました。
確かに、AはCに対して外部キー設定をしていて、同様の扱いをするのにAはBに対して外部キー設定をしていないので、
そこが怪しい気もします

1005 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 13:59:51.45 ID:BZqbbjGS.net]
>>986
この辺参考にしたら?
www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

1006 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 15:08:27.13 ID:SlcEPNYS.net]
そもそも中間テーブルのクラス(エンティティ)は必要なのか?
そしてその中間テーブルCに対して、A,Bそれぞれから外部キー制約が必要なのか?

NOなら、中間テーブルの作成すらコードファーストで勝手にやらせるだけ

YESなら、Aのエンティティが持つのはBじゃなくてCのエンティティ、Bも同様

1007 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 15:15:13.16 ID:7sIN5pY9.net]
>>990
おっさんなんか勘違いしてないか
C has A
C has B
んでもってA has B, B has A
だからCは中間テーブルでないぞ
ややこしくあるのはA Bだけでしょ
Cは今回出てきてるけどただ持ってるだけで実際関係ないゾ

1008 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 15:42:51.77 ID:SlcEPNYS.net]
>>991
もともとA,Bで多対多のリレーションって話だったはずなんだが
なんか勘違いしてるってなら
>C has A
>C has B
>んでもってA has B, B has A
の条件でテーブル定義かエンティティクラスの定義書いてみてくれんかね

1009 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 15:59:25.30 ID:SlcEPNYS.net]
埋めるように雑談

EFって、to 0..Nのリレーションはできるけど to 1..N のリレーションは
相手方の1を強制(保障)する方法がない気がするんだが

つまり 1..N:1..Nはコードファーストでは実現不可能なんじゃないかと思うんだが

1010 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:05:53.41 ID:7sIN5pY9.net]
>>992
上にもあるけどこうじゃねぇの

public class C {
public int Id {get;set;}
public List<A> a {get;set;}
public List<B> b {get;set;}
}
public class A {
public int Id {get;set;}
public List<B> ListB {get;set;}
public virtual C c {get;set;}
public A(){ ListB = new List<B>();}
}
public class B {
public int Id {get;set;}
public List<A> ListA {get;set;}
public virtual C c {get;set;}
public B(){ ListA = new List<A>();}
}

static void main(){
C c = new C{Id=1}

// できるやつ。でもCA、CBの関係はあるけどABの関係がないから値が入らない
c.a.ListB.add(new B{Id=1, c=c});
c.b.ListA.add(new A{Id=1, c=c});

// できないやつ。逆も同様
c.a.ListB.add(new B{Id=1, c=c, ListB =???});
}



1011 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:11:54.97 ID:SlcEPNYS.net]
>>994
AがCとListBと両方同時に持ってるのか?
Aが直接持つB群と、Cを通じて持つB群と別のものなのか?

1012 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:22:22.34 ID:7sIN5pY9.net]
>>995
同じなんじゃないの
それを結びつけようと頑張ってるんだと思う
俺はそう捉えて悩んでる

科目一つに対して講師が複数居る
科目一つに対して生徒が複数居る
そんな状況で、講師と生徒を結びつけたいのだと…あれ?ってことはこれ

public class C {
public int Id {get;set;}
public A a {get;set;}
public B b {get;set;}
}
public class A {
public int Id {get;set;}
public List<B> ListB {get;set;}
public virtual C c {get;set;}
public A(){ ListB = new List<B>();}
}
public class B {
public int Id {get;set;}
public List<A> ListA {get;set;}
public virtual C c {get;set;}
public B(){ ListA = new List<A>();}
}

static void main(){
List<C> c = new C();
c.Add();
}
こんな感じにしたらシンプルなんじゃないのかこの問題

1013 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:28:58.96 ID:7sIN5pY9.net]
違うわ シンプルにできん
たぶん科目に対して講師及び学生をリストで持ってるんだ
そしてそれぞれ講師・学生が持つ要素が同じものを指し示してる

そんでもってそれを科目の要素としてそれぞれに追加する時に
片方の要素が存在してないからどうすりゃええの?ってなってんだわきっと

1014 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:29:55.38 ID:SlcEPNYS.net]
>>996
同じなら、AにCとListB両方は同時にいらない。DB的にはあってはいけない

だから>>990
CというエンティティがあればListBはいらない
ListBがあれば、Cはいらない
という内容のことを言ったつもりなんだが

1015 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:33:52.27 ID:SlcEPNYS.net]
いつのまにか
A,Bのリレーションとそのための中間テーブルCっていう話から
講師、学生、科目という三つの実体の話にすり替わってるな

元の要件整理しなおさんと話が進まん

1016 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:34:43.64 ID:5iBcOCRm.net]
じゃあちょっと話を整理してみましょうか

1017 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 16:37:40.65 ID:SlcEPNYS.net]
これ以上続けるなら次スレで
やりたいこととちゃんとしたエンティティの定義出して

で、この話題はスレとともに一旦終了

1018 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 21日 16時間 2分 51秒

1019 名前:1002 [Over 1000 Thread.net]
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
premium.2ch.net/
pink-chan-store.myshopify.com/


1020 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています








[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<281KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef