2011-02-07 4 views
5

질문 : 고객에게 주문을 삽입하는 LINQ와 엔터티 코드는 무엇입니까?LINQ-to-Entities를 사용하여 특정 테이블에 데이터를 삽입하는 방법은 무엇입니까?

using (OrderDatabase ctx = new OrderDatabase()) 
{ 
    // Populate the individual tables. 

    // Comment in this next line to create a new customer/order combination. 
    // Customer customer = new Customer() { FirstName = "Bobby", LastName = "Davro" }; 
    // Comment in this line to add an order to an existing customer. 
    var customer = ctx.Customers.Where(c => c.FirstName == "Bobby").FirstOrDefault(); 

    Order order = new Order() { OrderQuantity = "2", OrderDescription = "Widgets" }; 

    // Insert the individual tables correctly into the hierarchy. 
    customer.Orders.Add(order); 

    // Add the complete object into the entity. 
    ctx.Customers.AddObject(customer); 

    // Insert into the database. 
    ctx.SaveChanges();       
} 
+0

물론 ADO.NET을 사용하여 작업을 수행 할 수는 있지만 기본/외래 키를 처리하여 내 모델을 "오염"시키고 싶지는 않습니다. 위의 코드에는 기본/외래 키가 없습니다. LINQ to Entities에서이 키를 처리합니다. – Contango

답변

3

귀하의 코드는 멀리 떨어져되지 않습니다 :

enter image description here

업데이트 여기

는 솔루션 (훨씬 청소기 솔루션 아래에 제출 한 답변을 참조) . 그냥 다음과 같이 당신의 두 번째 줄을 변경 :

Customer customer = ctx.Customer.FirstOrDefault(c => c.FirstName == "Bobby"); 
if (customer != null) 
{ 
    //... 

그냥 강하게 당신이 찾고있는 고객을 식별 할 수있는 무언가로 c.FirstName == "Bobby"을 대체 (예를 들어, c.Id == customerID 당신은 이미 ID가 무엇인지 알고있는 경우).

+1

훌륭하게, 이것은 훌륭하게 작동합니다. 당신이 정확하게 대답 할 때 대답을 포기해야했습니다. 많은, 많은 감사합니다! – Contango

+0

@Gravitas : 도움이 되니 기쁩니다! –

0

L2E는 현재 세트 기반 작업을 지원하지 않습니다 (선택하지 않고 업데이트). Use linq to generate direct update without select

+1

나는 그가 선택하지 않고 업데이트를 요구하고 있다고 생각하지 않는다. 그는 올바른 고객을 먼저 검색하기 위해 LINQ 쿼리를 언급합니다. –

3

주문서에는 고객 속성이 있습니다. 고객에게 주문을 추가 할 필요는 없습니다. 다른 방법으로 처리 할 수 ​​있습니다. 따라서 새 고객을 만드는 대신 Linq을 사용하여 고객을 얻은 다음 새 주문에 추가하십시오.

using (OrderDatabase ctx = new OrderDatabase()) 
{ 
    ctx.AddOrder(new Order() 
    { 
     OrderQuantity = 2, 
     OrderDescription = "Widgets", 
     Customer = ctx.Customers.First<Customer>(c => c.CustomerId == yourId) 
    }); 
    ctx.SaveChanges(); 
} 
+1

조건을 바꿔 다른 관련 조건으로 고객을 선택할 수 있습니다. 다른 기준으로 검색하려면 CustomerId를 보유 할 필요가 없습니다. – Andrew

+0

우수,이 코드는 팁이있어 매우 깨끗합니다. – Contango

1

정확하게 문제가 발생하지 않습니다.

var mycustomer = context.Customers.Where(x => x.id == 100).FirstOrDefault(); 
if(mycustomer != null) 
{ 
    mycustomer.Orders.Add(myorder); 
} 
context.SaveChanges(); 
+0

Brilliant - 이것도 멋지게 작동합니다! 많은, 많은 감사합니다. – Contango

관련 문제