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


Использование модели объектов Northwind (модель EDM)

Чтобы использовать модель объектов Northwind, спроектированную и построенную в коде приложений соседних разделов, добавьте ссылку на DLL-библиотеку и директиву using, задающую пространство имен NorthwindLib. Типы пространства имен будут доступны в коде приложения без синтаксиса SQL.

Файл конфигурации и строка соединения

Для использования модели объектов необходимо соединение с базой данных, в которой хранятся данные приложения. Необходимо также соединение сущности с объектами времени выполнения, предоставляемыми созданной из схем библиотекой.

Файл exe.config содержит строку соединения, которая используется для соединения с базой данных SQL Server и установления соединения сущности. Используя соединение сущности, из кода можно получить доступ к сущностям и ассоциациям модели объектов.

Текст строки соединения должен быть добавлен в файл exe.config разработчиком. Это приложение задает класс Northwind. Назначение providerName="System.Data.EntityClient" задает соединение сущности, которое использует схему сопоставления, определенную в спецификации сопоставления Northwind.

В строке соединения также определяется сервер, используемый в соединении SQL: provider connection string="server=servername".

В следующем примере показано содержимое файла exe.config.

?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="Northwind" 
                 connectionString='Metadata=.;
                 Provider=System.Data.SqlClient;
                 Provider Connection String="server=servername;
                 database=Northwind;Integrated Security=true;
                 Connection Timeout=5;multipleactiveresultsets=true"'
                 providerName="System.Data.EntityClient"/>
    </connectionStrings>
</configuration>

Путь к метаданным, которые включают в себя концептуальную схему, метаданные хранилища и спецификацию сопоставления, указывается присвоением Metadata=.. В этом примере файлы расположены в одной папке с исполняемым объектом, и поэтому путь задан точкой (.) в коде Metadata=.. Если схемы и файлы сопоставления находятся в разных папках, необходимо указать полный путь.

NoteПримечание.

Эта строка соединения устанавливает для параметра режима MARS значение True, когда это требуется для вызова метода Load для ассоциаций, если на данном соединении уже открыт другой модуль чтения данных.

Код приложения

В следующем фрагменте кода используются сущности и ассоциации, определенные в концептуальной схеме и сопоставленные с метаданными хранилища в спецификации сопоставления. Сведения о модели данных см. в разделе Модель Northwind (модель EDM). Соединение EntityConnection открыто с объектом сущности ObjectContext, созданным из концептуальной схемы, определенной в разделе Концептуальная схема Northwind (модель EDM). Сущности и ассоциации в пространстве имен NorthwindLib используются для отображения свойств сущностей, таких как идентификаторы заказов, поиска заказчиков на основе ассоциаций между сущностями, отображения продуктов, поиска и отображения категорий продуктов, связанных с продуктами при помощи ассоциаций.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NorthwindLib;

namespace NorthwindClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (NorthwindLib.Northwind DB = new Northwind())
                {
                    foreach (SalesOrder salesOrder in DB.SalesOrders)
                    {
                        salesOrder.CustomerReference.Load();
                        Console.WriteLine(
                            "Customer Contact: {0} ** OrderID: {1}",
                            salesOrder.Customer.ContactName,
                            salesOrder.OrderID.ToString());
                    }

                    foreach (Product product in DB.Products)
                    {
                        product.CategoryReference.Load();
                        Console.WriteLine(" Product: " +
                            product.ProductName +
                            " ** Category: " + 
                            product.CategoryReference.Value.CategoryName);
                    }

                    DB.Connection.Close();
                }
            }

            catch (System.Data.MappingException e)
            {
                Console.WriteLine(e.ToString());
            }
            catch (System.Data.CommandExecutionException e)
            {
                Console.WriteLine(e.ToString());
            }

        }
    }
}

См. также

Другие ресурсы

Спецификация схем и сопоставлений (платформа Entity Framework)
Спецификации модели EDM