16/07/31 12:16:36.38 tdu9NojY.net
別回線で立ててコーディングに夢中で案内忘れていました…
>> 981
NULLを許容するかしないかって話ですよね
自分もそう思っているのですが…
DB扱うのって本当に難しいですね…
1001:デフォルトの名無しさん
16/07/31 12:21:48.88 9Z6DmbVF.net
取り合えず立てた人チーすw
1002:デフォルトの名無しさん
16/07/31 13:03:24.52 4EU300F7.net
俺も良くわかってないが双方向でリストを持っているときっていつそれぞれのを結びつけるんだ?
それとも結びつけなくていいのか
Aを追加するときにBは居ないし逆もまた然りって永遠ループが頭の中で続くわ
1003:デフォルトの名無しさん
16/07/31 13:35:00.89 4EU300F7.net
書かれていることやろうとしても中間テーブルみたいなのは無理にとおせばできるけど
無限増殖問題か値が入らない問題が起きるぞ
なんで
>>954はできるんだ?コードが見てみたいんだが
1004:デフォルトの名無しさん
16/07/31 13:39:55.24 tdu9NojY.net
>>953
レスを返し忘れていました。
確かに、AはCに対して外部キー設定をしていて、同様の扱いをするのにAはBに対して外部キー設定をしていないので、
そこが怪しい気もします
1005:デフォルトの名無しさん
16/07/31 13:59:51.45 BZqbbjGS.net
>>986
この辺参考にしたら?
URLリンク(www.asp.net)
1006:デフォルトの名無しさん
16/07/31 15:08:27.13 SlcEPNYS.net
そもそも中間テーブルのクラス(エンティティ)は必要なのか?
そしてその中間テーブルCに対して、A,Bそれぞれから外部キー制約が必要なのか?
NOなら、中間テーブルの作成すらコードファーストで勝手にやらせるだけ
YESなら、Aのエンティティが持つのはBじゃなくてCのエンティティ、Bも同様
1007:デフォルトの名無しさん
16/07/31 15:15:13.16 7sIN5pY9.net
>>990
おっさんなんか勘違いしてないか
C has A
C has B
んでもってA has B, B has A
だからCは中間テーブルでないぞ
ややこしくあるのはA Bだけでしょ
Cは今回出てきてるけどただ持ってるだけで実際関係ないゾ
1008:デフォルトの名無しさん
16/07/31 15:42:51.77 SlcEPNYS.net
>>991
もともとA,Bで多対多のリレーションって話だったはずなんだが
なんか勘違いしてるってなら
>C has A
>C has B
>んでもってA has B, B has A
の条件でテーブル定義かエンティティクラスの定義書いてみてくれんかね
1009:デフォルトの名無しさん
16/07/31 15:59:25.30 SlcEPNYS.net
埋めるように雑談
EFって、to 0..Nのリレーションはできるけど to 1..N のリレーションは
相手方の1を強制(保障)する方法がない気がするんだが
つまり 1..N:1..Nはコードファーストでは実現不可能なんじゃないかと思うんだが
1010:デフォルトの名無しさん
16/07/31 16:05:53.41 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:デフォルトの名無しさん
16/07/31 16:11:54.97 SlcEPNYS.net
>>994
AがCとListBと両方同時に持ってるのか?
Aが直接持つB群と、Cを通じて持つB群と別のものなのか?
1012:デフォルトの名無しさん
16/07/31 16:22:22.34 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:デフォルトの名無しさん
16/07/31 16:28:58.96 7sIN5pY9.net
違うわ シンプルにできん
たぶん科目に対して講師及び学生をリストで持ってるんだ
そしてそれぞれ講師・学生が持つ要素が同じものを指し示してる
そんでもってそれを科目の要素としてそれぞれに追加する時に
片方の要素が存在してないからどうすりゃええの?ってなってんだわきっと
1014:デフォルトの名無しさん
16/07/31 16:29:55.38 SlcEPNYS.net
>>996
同じなら、AにCとListB両方は同時にいらない。DB的にはあってはいけない
だから>>990は
CというエンティティがあればListBはいらない
ListBがあれば、Cはいらない
という内容のことを言ったつもりなんだが
1015:デフォルトの名無しさん
16/07/31 16:33:52.27 SlcEPNYS.net
いつのまにか
A,Bのリレーションとそのための中間テーブルCっていう話から
講師、学生、科目という三つの実体の話にすり替わってるな
元の要件整理しなおさんと話が進まん
1016:デフォルトの名無しさん
16/07/31 16:34:43.64 5iBcOCRm.net
じゃあちょっと話を整理してみましょうか
1017:デフォルトの名無しさん
16/07/31 16:37:40.65 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円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
URLリンク(premium.2ch.net)
URLリンク(pink-chan-store.myshopify.com)
1020:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています