2009-09-30 6 views
0

두 개의 Linq2SQL 객체, OrderOrderLine이 있습니다. Order에는 복수 OrderLine이 포함되어 있습니다.Linq의 하위 엔티티를 SQL에 추가하는 방법은 무엇입니까?

나는 생성자 주문 (예약 예약)을 만들었습니다. 아이디어는이 생성자가 새로운 순서와 포함해야하는 순서를 생성한다는 것입니다. NullReferenceException이의

public Order(Reservation reservation) { 
    this.date = DateTime.Now; 
    this.Reserveration = reservation; 

    OrderLine orderLine = new OrderLine(reservation); 
    //this.attach_Orderlines(orderLine); 
    this.Orderlines.Add(orderLine); 
} 

this.Orderlines.Add(orderLine) 결과 :

나는이 코드를 가지고있다. 전화 할 때도 마찬가지입니다. this.attach_Orderlines(orderLine)

처음에는 Order을 저장해야하지만 어떻게해야합니까? 저장 함수가 포함 된 DataContext에서 Order를 호출하지 않습니다.

답변

2

(참고 : 나는 완전히 주석의 설명에 따라 내 대답을 변경 한 - 원래 답변에 대한 역사를 참조)이 질문에 대한 코멘트에서 논의 후

을, 이후 설명, 나에게 소리, 자신의 생성자를 만들기 때문에, 당신은 주문 개체의 Orderlines 속성을 초기화하지 않습니다.

Order의 기본 (매개 변수없는) 생성자에서 Orderlines EntitySet 속성을 초기화하는 코드 줄이 있어야합니다. 뭔가 같이 : 전화했을 때

public Order() 
{ 
    this._Orderlines = new EntitySet<Orderlines>(new Action<Orderline>(this.attach_Orderline), new Action<Orderline>(this.detach_Orderline)); 
    OnCreated(); 
} 

새 생성자의 .Orderlines 속성을 통해 노출되는 내부 EntitySet<T> 객체를 생성 할 수 표시되지 않습니다. 이것은 NullReferenceException을 설명하는 것으로 보입니다. 자신의 생성자가 기본 생성자를 호출하지 않으며 Orderlines EntitySet<T> 개체/속성의 초기화를 복제하지 않습니다.

이 작업을 수행하는 가장 좋은 방법은 Reservation 개체를 매개 변수로 사용하는 오버로드 된 생성자가이 초기화가 발생할 수있는 기본 (매개 변수없는) 생성자를 먼저 호출하도록 생성자를 "연결"하는 것입니다. 이는 같은 것을 사용하여 달성 될 것이다 : (! null을 반환하지 않는 코드의 Orderline orderline = new OrderLine(reservation) 라인을 가정)

public Order(Reservation reservation) : this() 
{ 
    this.date = DateTime.Now; 
    this.Reserveration = reservation; 

    OrderLine orderLine = new OrderLine(reservation); 
    //this.attach_Orderlines(orderLine); 
    this.Orderlines.Add(orderLine); 
} 

코드 귀하의 this.Orderlines.Add(orderLine) 라인이 이제 제대로 작동합니다을

+0

아니요, InsertOnSubmit이 필요하지 않습니다. – leppie

+0

@leppie - 이유를 설명하는 배려? 게시 된 코드는 테이블 에서 파생 된 Orderlines 개체의 .Add 메서드 (아마도 LINQ2SQL 질문)를 사용하여 보여줍니다. 추가 및 제거 방법은 더 이상 내 대답에 많은 링크에 명확하게 표시된 베타 버전을 넘어 VS2008에 존재하지 않습니다. – CraigTP

+0

InsertOnSubmit이 없습니다. 내가 사용하고있어.Net 3.5. – jao

1

주문을 초기화하십시오. 주문. 추가하기 전에 새 컬렉션이어야합니다.

public Order(Reservation reservation) { 
    this.date = DateTime.Now; 
    this.Reserveration = reservation; 

    OrderLine orderLine = new OrderLine(reservation); 
    //this.attach_Orderlines(orderLine); 
    this.Orderlines = new List<OrderLine>(); 
    this.Orderlines.Add(orderLine); 
} 
+0

이렇게하면'this._Orderlines.Assign (value);에 새로운 NullReferenceException이 추가됩니다. – jao

+0

또한 Orderlines은'System.Data.Linq.EntitySet'입니다. – jao

0

당신은 OnCreated 부분에 생성자 논리를 추가해야합니다 방법.

관련 문제