Как добавить объект к конкретному набору сущностей (платформа Entity Framework)
В данном разделе используется модель EDM, созданная в разделе Как определить модель с несколькими наборами сущностей на тип (платформа Entity Framework).
Создание приложения, использующего несколько наборов сущностей на тип
Создайте проект приложения командной строки и добавьте ссылки на System.Data.Entity и System.Runtime.Serialization.
Добавьте ссылку на библиотеку, созданную из модели наследования в разделе Как определить модель с несколькими наборами сущностей на тип (платформа Entity Framework).
Добавьте файл конфигурации приложения. Следующее выражение задает путь к метаданным схемы и строку соединения с сервером, где хранятся данные.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="RegionalCustomersEntities"
connectionString="metadata=.;
provider=System.Data.SqlClient;
provider connection string="
Data Source=serverName;
Initial Catalog=RegionalCustomersMEST;
Integrated Security=True;
multipleactiveresultsets=true""
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
Добавление сущностей Customer и Order к наборам сущностей, представляющим западный регион
В следующем программном коде создается новый экземпляр типа Customer и добавляется к наборам сущностей, представляющих западный географический регион.
Добавление сущностей одного типа к разным наборам сущностей
Создайте экземпляр типа CustomerWest и инициализируйте свойства CustomerId, Name и TotalPurchases данного заказчика.
Создайте экземпляр типа OrderWest и инициализируйте свойства заказа.
Укажите для этого заказа заказчика, созданного на шаге 1.
Добавьте экземпляры CustomerWest и OrderWest в хранилище с помощью методов AddTCustomersWest и AddToOrdersWest. Эти методы создаются, когда модель данных формируется программой Edmgen.exe.
Создайте еще один экземпляр типа OrderWest и назовите его newOrder.
Создайте параметр ObjectParameter, который будет использоваться в запросе к заказчику, созданному на шаге 1.
Запустите запрос, чтобы найти заказчика.
Измените свойство TotalPurchases этого заказчика, добавив свойство newOrderTotalAmount к свойству TotalPurchases этого заказчика.
Назначьте этого заказчика заказу newOrder.
Добавьте заказ 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)