Comment puis-je utiliser LINQ-to-Entités pour insérer des données dans une table spécifique?
Question: qu'est-ce que le LINQ-to-Entité code à insérer une commande pour un spécifiques client?
Mise à jour
Voici la solution (voir l'une des réponses ci-dessous pour une solution plus propre):
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();
}
Bien sûr, je pourrais les utiliser ADO.NET pour faire le travail - mais je ne veux pas "polluer" mon modèle en traitant avec les primaires et les clés étrangères. Notez que le code ci-dessus n'ont pas de primaires et les clés étrangères - LINQ to entities gère cela pour moi.
OriginalL'auteur Contango | 2011-02-07
Vous devez vous connecter pour publier un commentaire.
Votre code n'est pas très loin. Il suffit de changer votre deuxième ligne pour lire comme suit:
Il suffit de remplacer le
c.FirstName == "Bobby"
avec quelque chose qui peut fortement identifier le client que vous recherchez (par exemplec.Id == customerID
si vous savez déjà ce que l'ID est).Heureux de vous aider!
OriginalL'auteur Justin Morgan
Avis que l'Ordre a une propriété du Client. Vous n'avez pas à ajouter de la Commande au Client-vous pouvez le faire dans l'autre sens. Donc, au lieu de créer un nouveau Client, obtenir le Client à l'aide de Linq, puis l'ajouter à votre nouvelle Commande.
Excellent, ce code est très propre, merci pour l'astuce.
OriginalL'auteur Andrew
Je ne comprends pas quel est le problème exactement.
OriginalL'auteur Jcl
L2E ne prend pas en charge l'ensemble des opérations basées actuellement (mise à jour sans le sélectionner). Voir L'utilisation de linq pour générer la mise à jour directe sans sélectionner
OriginalL'auteur esac