2009-08-15 6 views
0

나는 많은 테이블을 가지고 있으며 그 중 일부는 다른 테이블과 많은 관계가 있습니다. 나는 그것이 NerdDinner 장에 표시됩니다 일을 할 수 있어요 일 개 관계가 테이블 1.Linq에서 SQL에 외래 키 관계에 대한 질문

Dinner dinner = db.Dinners.Single(d => d.DinnerID == 1); 
RSVP myRSVP = new RSVP(); 
myRSVP.AttendeeName = "ScottGu"; 

dinner.RSVPs.Add(myRSVP); 

그래서 나는 그것이 하나 개의 관계처럼하지 않는 한 뭔가 비슷한 .add 나를 위해 나타 결코 시도났습니다.

그래서 어떻게 여러 사람이 사용할 수 있습니까?

나는 어쨌든 이것이 나를 어떻게 가져올 지 아직 명확하지 않습니다. 그것도 타이핑을하지 않아도 되는가? 또는 무엇을?

+1

http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-에서 SQL 튜토리얼에 스콧 오클라호마의 Linq에 체크 아웃하십시오 1.aspx –

답변

4

OK,의이 조금 명확하게 해보자 : 여기 당신이 게시물에 그것을 언급으로 기본 NerdDinner 스키마는 다음과 같습니다

alt text http://i31.tinypic.com/nejqmu.jpg

당신이 "답장"을해야합니다 여부를 질문 엔티티를 추가 할 수있는 스타일 속성 ("EntitySet")은 하나 또는 여러 개의 관계가 있는지 여부에 달려 있지 않습니다. 관계의 끝에 따라 달라집니다.

(여기 : 저녁 식사)를 부모 테이블는 (: RSVP 여기)를 자식 테이블에서 일반적으로 0, 1, 이상의 하위 항목이 있습니다.

부모 테이블에는 EntitySet 등 여러 엔터티를 저장할 수있는 "RSVPs"속성이 있어야합니다.

그러나 자식 테이블에서 자식은 정확히 부모 중 하나 인과 만 연결할 수 있습니다. 따라서 "저녁 식사"(이 RSVP가 예정된 저녁 식사)라는 단일 엔터티 만 가질 수 있습니다. 당신은 명확하게 두 엔티티 사이의 선을 클릭하고 속성을 볼 때 볼

는 :

alt text http://i31.tinypic.com/2f07our.jpg

은 "카디널리티"일대 정의를 그냥이 : 부모는 많은있다 자녀가 있지만, 한 명의 자녀에게는 정확히 한 명의 부모 만 있습니다.Linq에 - 투 - SQL에서, 정확하게는

 NerdDinnerDataContext ctx = new NerdDinnerDataContext(); 

     Dinner upcomingDinner = new Dinner(); 
     upcomingDinner.EventDate = new DateTime(2009, 10, 10); 
     upcomingDinner.Address = "One Microsoft Way, Redmond, WA"; 
     upcomingDinner.ContactPhone = "(555) 123 1234"; 

     upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" }); 
     upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottHa" }); 
     upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "PhilHa" }); 


     RSVP scottHunter = new RSVP(); 
     scottHunter.AttendeeName = "Scott Hunter"; 
     scottHunter.Dinner = upcomingDinner; 

부모 (저녁 식사) 참석 여부 (AN EntitySet의 컬렉션이 있습니다 :

따라서, 코드에서, 당신이 쓸 수 있습니다 용어), 그러므로 반면에

 upcomingDinner.RSVPs.Add(new RSVP() { AttendeeName = "ScottGu" }); 

을 가질 수는 자식 속성 "RSVP는"오직 단 하나의 저녁 식사와 연관 될 수 있으므로는 EntitySet이 있지만, 단지 하나의 예를하지 않습니다 "저녁 식사"연결을 설정하고, 당신은 쓸 것입니다 :

 scottHunter.Dinner = upcomingDinner; 

이렇게하면 상황이 좀 더 명확 해 집니까? 이것은 실제로 관계형 데이터베이스 모델링의 기본이자 부모 테이블과 자식 테이블을 서로 연관시키는 방법입니다. Linq-to-SQL에 의해 객체로 변환되고 어떻게 연결되고 연관 될 수 있는지에 대해 설명합니다.

마크

+0

단일 관계 선박 엔터티? 그것이 무엇인지는 모르지만 나는 약 0.1의 관계가 있다고 생각한다. 어떻게 알 수 있습니까? mssql 2005의 다이어그램은 기본 키 또는 1 대 다수를 보여줍니다. – chobo2

+0

나는 그것을 지금 얻고 있다고 생각한다. RSVP를 사용하면 DinnerId를 추가 할 필요가 없습니다. 나는 특히 scottHunter.Dinner = upcomingDinner;와 함께 마지막 몇 줄에 대해 100 % 확실하지 않습니다. 왜 당신은 회답자인 모든 사람들을 회답하는 사람으로 여기시겠습니까? 아니면 Dinner 개체를 만들고 "Scott Hunter"를 호스팅하고 다른 필드를 채 웁니다. – chobo2

+0

"저녁 식사"를 "ScottHunter"에게 보내면이 저녁 식사를 ScottHunter가 참석할 계획으로 지정합니다. 그것은 ScottHunter와 "upcomingDinner"사이의 관계를 수립 할 것입니다. "upcomingDinner"에서 "RSVP"EntitySet에 ScottHunter라는 새로운 "RSVP"개체가 표시됩니다.이 개체는 참석자 목록에 추가되었습니다. ScottHunter RSVP 객체에서 "UpcomingDinner"가 그가 참여할 예정인 저녁 식사로 표시됩니다. 그것은 항상 양방향 협회입니다! –

0

관계의 각 테이블마다 하나의 추가가 필요합니다.

Add 메서드는 개체를 해당 데이터베이스 테이블에 추가 할 수 있도록 Linq to SQL 데이터 컨텍스트에 단계적으로 배치합니다. SubmitChanges 메서드는 보류중인 변경 내용을 데이터베이스에 저장합니다. 따라서 모든 추가 작업을 수행 한 다음 즉시 추가 작업을 수행 할 수 있습니다.

+0

예를 들어 주시겠습니까? 나는 지금 LOL 5 분처럼 LINQ에 SQL을하고 있었는지 따라하지 않습니다. 그래서 나는이 방법을 추가하는 방법을 모르지만 여전히 100 % 확실하지 않습니다. – chobo2

관련 문제