Поделиться через


Как добавить объект к конкретному набору сущностей (платформа Entity Framework)

В данном разделе используется модель EDM, созданная в разделе Как определить модель с несколькими наборами сущностей на тип (платформа Entity Framework).

Создание приложения, использующего несколько наборов сущностей на тип

  1. Создайте проект приложения командной строки и добавьте ссылки на System.Data.Entity и System.Runtime.Serialization.

  2. Добавьте ссылку на библиотеку, созданную из модели наследования в разделе Как определить модель с несколькими наборами сущностей на тип (платформа Entity Framework).

  3. Добавьте файл конфигурации приложения. Следующее выражение задает путь к метаданным схемы и строку соединения с сервером, где хранятся данные.

<?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>

Добавление сущностей Customer и Order к наборам сущностей, представляющим западный регион

В следующем программном коде создается новый экземпляр типа Customer и добавляется к наборам сущностей, представляющих западный географический регион.

Добавление сущностей одного типа к разным наборам сущностей

  1. Создайте экземпляр типа CustomerWest и инициализируйте свойства CustomerId, Name и TotalPurchases данного заказчика.

  2. Создайте экземпляр типа OrderWest и инициализируйте свойства заказа.

  3. Укажите для этого заказа заказчика, созданного на шаге 1.

  4. Добавьте экземпляры CustomerWest и OrderWest в хранилище с помощью методов AddTCustomersWest и AddToOrdersWest. Эти методы создаются, когда модель данных формируется программой Edmgen.exe.

  5. Создайте еще один экземпляр типа OrderWest и назовите его newOrder.

  6. Создайте параметр ObjectParameter, который будет использоваться в запросе к заказчику, созданному на шаге 1.

  7. Запустите запрос, чтобы найти заказчика.

  8. Измените свойство TotalPurchases этого заказчика, добавив свойство newOrderTotalAmount к свойству TotalPurchases этого заказчика.

  9. Назначьте этого заказчика заказу newOrder.

  10. Добавьте заказ newOrder в хранилище методом AddToOrdersWest.

Примеры

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());
            }
        }
    }
}

См. также

Задачи

Как определить модель с несколькими наборами сущностей на тип (платформа Entity Framework)
Как создать и выполнить запрос объектов с использованием нескольких наборов сущностей на тип (платформа Entity Framework)