2011-02-07 9 views
5

Domanda: qual è il codice LINQ-to-Entity per inserire un ordine per un cliente specifico?Come utilizzare LINQ-to-Entities per inserire dati in una tabella specifica?

enter image description here

Aggiornamento

Ecco la soluzione (si veda una delle risposte presentate qui sotto per una soluzione molto più pulito):

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

Ovviamente, potrei probabilmente usare ADO.NET per fare il lavoro - ma non voglio "inquinare" il mio modello trattando chiavi primarie/esterne. Si noti che il codice sopra non ha chiavi primarie/esterne - LINQ to Entities gestisce questo per me. – Contango

risposta

3

Il codice non è lontano . Basta cambiare la seconda linea come segue:

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

basta sostituire il c.FirstName == "Bobby" con qualcosa che può fortemente identificare il cliente che state cercando (per esempio c.Id == customerID se sai già che cosa l'ID è).

+1

Brillante, funziona bene. Dovevo darti la risposta come prima hai risposto correttamente. Molte molte grazie! – Contango

+0

@Gravitas: Felice di aiutare! –

0

L2E non supporta attualmente le operazioni basate su set (aggiornamento senza selezionare). Vedi Use linq to generate direct update without select

+1

Non penso che stia chiedendo un aggiornamento senza selezionare. Menziona una query LINQ per recuperare prima il cliente corretto. –

3

Si noti che l'ordine ha una proprietà del cliente. Non è necessario aggiungere l'ordine al cliente - è possibile farlo viceversa. Quindi, invece di creare un nuovo cliente, ottenere il cliente utilizzando Linq, quindi aggiungerlo al nuovo ordine.

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

Si noti che è possibile sostituire la condizione per selezionare il Cliente con qualsiasi altra condizione pertinente; non hai bisogno del tuo ID per avere il CustomerId se vuoi cercare su altri criteri. – Andrew

+0

Eccellente, questo codice è molto pulito, grazie per il suggerimento. – Contango

1

Non capisco quale sia il problema, esattamente.

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

Brillante: funziona anche bene! Molte molte grazie. – Contango

Problemi correlati