Использование модели объектов AdventureWorks (модель EDM)
В коде, используемом клиентским приложением AdventureWorks, показанном в приведенном ниже примере, демонстрируются несколько функций модели Entity Data Model (модель EDM). Схемы, описанные в предыдущих разделах, посвященных модели AdventureWorks, являются основой для сущностей и ассоциаций, используемых в коде в этом разделе.
Типы, сконструированные в схемах и сопоставленные с хранилищем, создаются в виде программируемой модели объектов. Данные в такой модели можно программировать с использованием синтаксиса среды CLR без SQL-запросов, внедренных в код в виде строк.
Конфигурация приложения
Для использования модели объектов необходимо соединение с базой данных, в которой хранятся данные приложения. Необходимо также соединение сущности с объектами времени выполнения, предоставляемыми созданной из схем библиотекой.
Файл exe.config содержит строку соединения, которая используется для соединения с базой данных SQL Server и установления соединения сущности. При наличии соединения сущности можно из кода получить доступ к сущностям и ассоциациям модели объектов.
Текст строки соединения должен быть добавлен в файл exe.config разработчиком.
Назначение providerName="System.Data.EntityClient"
указывает соединение сущности, использующее схемы и сопоставления, определенные в схемах, показанных в других подразделах в этом разделе.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="AdventureworksContext" connectionString='Metadata=.;
Provider=System.Data.SqlClient;
Provider Connection String="server=.\sqlExpress;
database=Adventureworks;
Integrated Security=true;Connection Timeout=5;
multipleactiveresultsets=true"'
providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>
Примечание. |
---|
Эта строка соединения устанавливает для параметра режима MARS значение True, когда это требуется для вызова метода Load для ассоциаций, если на данном соединении уже открыт другой модуль чтения данных. |
Использование сущностей и ассоциаций AdventureWorks
В следующем коде демонстрируются запросы, основанные на сущностях и ассоциациях, определенных в схемах, приведенных в других подразделах данного раздела.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AdventureWorks;
using System.Data.Objects;
using System.Data.EntityClient;
using System.Data.Metadata.Edm;
using System.Collections.ObjectModel;
namespace AdventureworksClient
{
class Program
{
static void Main(string[] args)
{
using (AdventureWorksContext objCtx = new AdventureWorksContext())
{
// find first 50 employees and display data.
foreach (Employee employee in
objCtx.Employee.Where("it.EmployeeID < 50"))
{
Console.WriteLine("EmployeeID: {0}",
employee.EmployeeID);
// Find employee job candidate and print resume.
employee.JobCandidate.Load();
foreach (JobCandidate jc in employee.JobCandidate)
Console.WriteLine("\tJobCandidate: {0} \n\t{1}",
jc.JobCandidateID, jc.Resume);
// Find manager of employee and display.
if (null != employee.Employee2)
{
employee.Employee2.Employee2Reference.Load();
Console.WriteLine("Employee: {0} Manager: {1}",
employee.EmployeeID.ToString(),
employee.Employee2.EmployeeID.ToString());
}
}
// Employees IDs 1 - 290.
// Find first 50 with contact information.
foreach (Contact contact in
objCtx.Contact.Where("it.ContactID < 50"))
{
Console.WriteLine("Contact: {0} {1} {2}",
contact.ContactID, contact.FirstName,
contact.LastName);
foreach (EmployeeAddress emplAddress in
objCtx.EmployeeAddress)
{
if (emplAddress.EmployeeID.Equals(contact.ContactID))
{
ObjectParameter param = new
ObjectParameter("p",
emplAddress.AddressID);
Address address =
objCtx.Address.Where(
"it.AddressID = @p",
param).First();
Console.WriteLine(
"\tEmployee address: {0}\n\t{1}\n\t{2}",
address.AddressLine1,
address.City, address.PostalCode);
}
}
}
// Find and display vendors.
foreach (Vendor vendor in objCtx.Vendor)
Console.WriteLine("Vendor: {0}", vendor.Name);
// Find and display store information.
foreach (Store store in objCtx.Store)
Console.WriteLine("Store: {0}", store.Name);
// Find and display product information.
foreach (Product product in objCtx.Product)
{
Console.WriteLine("Product Name: {0}", product.Name);
product.ProductModelReference.Load();
if (null != product.ProductModel)
{
Console.WriteLine("Model: {0}",
product.ProductModel.ProductModelID.ToString());
}
}
}
try
{
// Establish a connection to the underlying data provider by
// using the connection string specified in the config file.
using (EntityConnection connection =
new EntityConnection("Name=AdventureWorksContext"))
{
// Open the connection.
connection.Open();
// Access the metadata workspace.
MetadataWorkspace workspace =
connection.GetMetadataWorkspace();
// To run DisplayProperties(workspace, DataSpace.CSpace);
// to display the extended properties in the conceptual model.
// see Extended Property (CSDL) (link under See Also).
}
}
catch (System.Data.MetadataException exceptionMetadata)
{
Console.WriteLine("MetadataException: {0}",
exceptionMetadata.Message);
}
catch (System.Data.MappingException exceptionMapping)
{
Console.WriteLine("MappingException: {0}",
exceptionMapping.Message);
}
}
}
}
См. также
Основные понятия
Расширенное свойство (язык CSDL)
Другие ресурсы
Спецификации модели EDM
Спецификация схем и сопоставлений (платформа Entity Framework)
Образцы приложений (платформа Entity Framework)