Condividi tramite


Procedura: aggiungere un oggetto a un set di entità specifico (Entity Framework)

In questo argomento viene utilizzato il modello EDM (Entity Data Model) progettato in Procedura: definire un modello con più set di entità per tipo (Entity Framework).

Per creare un'applicazione utilizzando più set di entità per tipo

  1. Creare un progetto di applicazione console e aggiungere riferimenti a System.Data.Entity e System.Runtime.Serialization.

  2. Aggiungere un riferimento alla DLL compilata in base al modello di dati definito nell'argomento Procedura: definire un modello con più set di entità per tipo (Entity Framework).

  3. Aggiungere un file di configurazione dell'applicazione. Nella sintassi seguente vengono forniti un percorso ai metadati dello schema e la stringa di connessione al server che ospita i dati.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="RegionalCustomersEntities" 
         connectionString="metadata=.;
         provider=System.Data.SqlClient;
         provider connection string=&quot;
         Data Source=serverName;
         Initial Catalog=RegionalCustomersMEST;
         Integrated Security=True;
         multipleactiveresultsets=true&quot;" 
         providerName="System.Data.EntityClient" />
  </connectionStrings>

</configuration>

Aggiungere entità cliente e ordine ai set di entità che rappresentano la regione occidentale

Il codice seguente consente di creare una nuova istanza del tipo Customer e di aggiungerla a un set di entità che rappresenta l'area geografica occidentale.

Per aggiungere entità dello stesso tipo a set di entità distinti

  1. Creare un'istanza del tipo CustomerWest e inizializzare le proprietà CustomerId, Name e TotalPurchases del cliente.

  2. Creare un'istanza del tipo OrderWest e inizializzare le proprietà dell'ordine.

  3. Assegnare il cliente creato al passaggio 1 al nuovo ordine.

  4. Aggiungere le istanze di CustomerWest e OrderWest all'archivio utilizzando i metodi AddTCustomersWest e AddToOrdersWest. Questi metodi vengono creati quando viene generato il modello di dati da Edmgen.exe.

  5. Creare un'altra istanza di OrderWest denominata newOrder.

  6. Creare un oggetto ObjectParameter da utilizzare in una query per il cliente creato al passaggio 1.

  7. Eseguire una query per trovare il cliente.

  8. Aggiornare la proprietà TotalPurchases del cliente aggiungendo la proprietà TotalAmount di newOrder alla proprietà TotalPurchases del cliente.

  9. Assegnare il cliente a newOrder.

  10. Aggiungere newOrder all'archivio utilizzando il metodo AddToOrdersWest.

Esempio

Option Explicit On
Module Module1
    Sub Main()
        Try
            Using objCtx As RegionalCustomersEntities = _
                        New RegionalCustomersEntities()

                ' Create a new customer.
                Dim customerWest As New Customer()
                customerWest.CustomerId = _
                         objCtx.CustomersWest.Count() + 1
                customerWest.Name = _
                         "CustomerWest " + _
                              customerWest.CustomerId.ToString()
                customerWest.TotalPurchases = CType(875, Decimal)

                ' Create Order.
                Dim orderWest As New OrderWest()
                orderWest.OrderId = _
                         objCtx.OrdersWest.Count() + 1
                orderWest.OrderTotal = customerWest.TotalPurchases
                orderWest.Tax = _
                         orderWest.OrderTotal * CType(0.07, Decimal)

                orderWest.Customer = customerWest

                ' Add customer and order to object context.
                objCtx.AddToCustomersWest("customerWest)
                objCtx.AddToOrdersWest(orderWest)

                objCtx.SaveChanges()

                ' Add order to existing customer.
                Dim newOrder As New OrderWest
                newOrder.OrderId = objCtx.OrdersWest.Count + 1
                newOrder.OrderTotal = CType(338.0, Decimal)
                newOrder.Tax = newOrder.OrderTotal * CType(0.07, Decimal)

                Dim param As New ObjectParameter("p", 3)
                If Not 0 = objCtx.CustomersWest. _
                      Where("it.CustomerId = @p", param).Count() Then
                    Dim c As Customer = _
                        objCtx.CustomersWest. _
                        Where("it.CustomerId = @p", param).FirstOrDefault()

                    c.TotalPurchases = c.TotalPurchases + newOrder.OrderTotal

                    newOrder.Customer = c
                    objCtx.SaveChanges()

                End If

            End Using
        Catch ex As Exception
            Console.WriteLine(ex.ToString())
        End Try
    End Sub
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using RegionalCustomersModel;
using System.Data.Objects;

namespace ClientRegionalCustomers
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (RegionalCustomersEntities objCtx = 
                           new RegionalCustomersEntities())
                {
                    // Create a new customer.
                    Customer customerWest = new Customer();

                    customerWest.CustomerId =
                        objCtx.CustomersWest.Count<Customer>() + 1;

                    customerWest.Name = 
                        "Customer West " + 
                        customerWest.CustomerId.ToString();

                    customerWest.TotalPurchases = 
                        (decimal)875.00;

                    // Create Order.
                    OrderWest orderWest = new OrderWest();
                    orderWest.OrderId = 
                        objCtx.OrdersWest.Count<OrderWest>() + 1;

                    orderWest.OrderTotal = 
                        customerWest.TotalPurchases;
                    orderWest.Tax = 
                        orderWest.OrderTotal * (decimal).07;

                    orderWest.Customer = customerWest;

                    // Add customer and order to object context.
                    objCtx.AddToCustomersWest(customerWest);
                    objCtx.AddToOrdersWest(orderWest);

                    objCtx.SaveChanges();

                    // Add an order to existing customer.
                    OrderWest newOrder = new OrderWest();
                    newOrder.OrderId =
                        objCtx.OrdersWest.Count<OrderWest>() + 1;
                    newOrder.OrderTotal = (decimal)338.00;
                    newOrder.Tax = 
                               newOrder.OrderTotal * (decimal).07;

                    ObjectParameter param = 
                        new ObjectParameter("p", 3);
                    if (0 != objCtx.CustomersWest.Where(
                        "it.CustomerId = @p",
                         param).Count<Customer>())
                    {
                        Customer c =
                            objCtx.CustomersWest.Where(
                            "it.CustomerId = @p", 
                            param).First<Customer>();

                        c.TotalPurchases =
                            c.TotalPurchases + newOrder.OrderTotal;

                        newOrder.Customer = c;
                        
                        objCtx.SaveChanges();
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

Vedere anche

Attività

Procedura: definire un modello con più set di entità per tipo (Entity Framework)
Procedura: creare ed eseguire query di oggetto utilizzando più set di entità per tipo (Entity Framework)