Главная страница
Навигация по странице:

  • ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВА- НИЯ НА C

  • Классы и объекты

  • Управление видимостью. Методы доступа и свойства. Конструктор

  • Статические члены класса

  • Наследование и полиморфизм

  • ГЛАВА 4. АССОЦИАЦИИ МЕЖДУ КЛАССАМИ И КОЛЛЕКЦИИ ОБЪЕКТОВ

  • Классы коллекций

  • ЗАДАНИЕ НА ВЫПОЛНЕНИЕ КОНТРОЛЬНОЙ РАБОТЫ

  • ПРИМЕР ВЫПОЛНЕНИЯ КОНТРОЛЬНОЙ РАБОТЫ Задание

  • АУЖИЦИ. АУЖЦИ Контрольная. Контрольная работа по автоматизации управления жизненным циклом изделия


    Скачать 264.7 Kb.
    НазваниеКонтрольная работа по автоматизации управления жизненным циклом изделия
    АнкорАУЖИЦИ
    Дата02.03.2022
    Размер264.7 Kb.
    Формат файлаpdf
    Имя файлаАУЖЦИ Контрольная.pdf
    ТипКонтрольная работа
    #379991

    1
    КОНТРОЛЬНАЯ РАБОТА ПО АВТОМАТИЗАЦИИ УПРАВЛЕНИЯ
    ЖИЗНЕННЫМ ЦИКЛОМ ИЗДЕЛИЯ
    Электронный паспорт изделия представляет собой технический доку- мент, предназначенный, прежде всего, для её потребителей, поскольку в нём содержатся основные технические и эксплуатационные характеристики изде- лия, а также информация о проведенных работах по его обслуживанию.
    Электронный паспорт изделия должен прийти на смену обычному паспорту изделия, что определяется всей логикой развития информационных техноло- гий автоматизации управления жизненным циклом изделия.
    Целью контрольной работы является приобретение навыков создания объектной модели и базы данных для электронного паспорта изделия. Пас- порт изделия создается на языке C# с использованием платформы ADO.NET
    Entity Framework. База данный реализуется для MS SQL Server.
    Информация по созданию приложений на языке C# представлена на канале YouTube: https://www.youtube.com/playlist?list=PLgpowKVDMNLWbYgDxowiHm xLSs1ncgUI8
    ОСНОВЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВА-
    НИЯ НА C#
    Алгоритмический язык C# относится к новейшим языкам объектно- ориентированного программирования. C# создавался «с нуля» для новой платформы Microsoft .NET и вобрал в себя все лучшее от предыдущих язы- ков объектно-ориентированного программирования, в первую очередь, от языков C++ и Java. Но последние версии этого языка программирования включили новые конструкции, которые отсутствуют в С++ и Java. Начиная с третьей версии языка C# получил мощнейшее средство - интегрированных язык запросов LINQ. C# является активно развивающимся языком, который по праву можно считать основным языком при разработке приложений Win- dows.
    C# относится к языкам с C-подобным синтаксисом. Синтаксически он очень похож на языки программирования C++ и Java, хотя имеются и неко- торые отличия.
    Классы и объекты
    В C# классы создаются с помощью ключевого слова class. Тело класса помещается внутри операторов блока, задаваемого с помощью фигурных скобок: class Имя_класса
    {

    2
    //Тело класса
    }
    Приведем примеры создания атрибутов и методов на примере про- стейшего класса точек: class Point
    { public int
    X; public int
    Y; public string MoveBy(int dx, int dy)
    {
    X
    += dx;
    Y
    += dy;
    }
    }
    Атрибуты создаются как обычные переменные, предваряемые квали- фикатором доступа public, который означает, что атрибутам можно обра- щаться как внутри класса, так и извне. Это правило распространяется на лю- бые члены класса, предваряемые квалификатором видимости public. Методы реализуются с помощью функций языка C, которые, как и в случае с атрибу- тами, предваряются квалификатором доступа (в нашем случае public).
    Методы реализуются с помощью функций, сигнатура которой предва- ряется модификатором области видимости.
    Объекты являются экземплярами класса и создаются с помощью опера- тора new:
    Point p1 = new Ponint();
    Point p2 = new Point(); p1.X = 5; p1.Y = 10; p2.X = 8; p2.Y = 19;
    Здесь p1 и p2 отдельные объекты точек. Эти объекты ведут себя неза- висимо друг от друга. Мы можем менять значения атрибутов одного объекта, никак не влияя на другой. Например, в следующей строчке кода мы изменяем значения координат точки p1 на 10 (по x) и 20 (по y): p1.MoveBy(10, 20);
    Тогда значения координат x и y точки p1 будут равны 15 и 30, соответ- ственно. Значения координат точки p2 останутся неизменными и будут иметь значения 8 (по x) и 19 (по y). Таким образом, p1 и p2 – два независимых объ- екта, а объединяет их лишь то, что они являются экземплярами класса Point.
    Здесь полная аналогия с объектами предметной области, в нашем случае – с точками.

    3
    Управление видимостью. Методы доступа и свойства. Конструктор
    В реальных объектно-ориентированных программах атрибуты, обычно, не являются общедоступными, их делают либо закрытыми, либо защищен- ными. К закрытым (private) атрибутам, как и прочим членам класса, можно обратиться лишь из класса, которому они принадлежат (внутри тела класса) и невозможно обратиться извне. К защищенным (private) атрибутам, как и про- чим членам класса, можно обратиться как внутри тела класса, так и из класса
    – потомка данного класса (класса, который порожден от данного класса).
    Чтобы получить доступ к закрытым и защищенным атрибутам извне класса создают методы доступа Get и Set, которые, соответственно, считы- вают и устанавливают значения атрибутов: public int GetX()
    {
    Return
    _X;
    } public void SetX(int x)
    {
    _X
    = x;
    }
    Пример использования методов доступа:
    Point p1 = new Point(); p1.SetX(15); p1.SetY(20);
    Point p2 = new Point(); p2.SetX(p1.GetX()); p2.SetY(p2.GetY());
    Здесь координаты точки p2 будут такими же, как и у p1. Но при этом это будут два отдельных объекта!
    В C# обычно вместо методов доступа используются свойства. Свойства
    – это такие методы, которые с точки зрения пользователя выглядят как атри- буты. public int X
    { get
    { return
    _X;
    { set
    {
    _X = value;

    4
    }
    }
    Здесь переменная value содержит значение, которое устанавливается у атрибута.
    Пример использования свойств:
    Point p1 = new Point();
    P1.X = 100;
    P1.Y = 200;
    Разумеется, в классе создаются или методы доступа, или свойства. В
    C# традиционно вместо методов доступа используются именно свойства.
    Также следует заметить, что у атрибутов класса могут быть как свойства (или методы доступа) get и set, так может быть и только какое-то одно свойство
    (метод доступа) get или set, что определяется логикой класса. Кроме того, помимо установки/считывания значений атрибутов, в коде свойств и методов доступов могут выполняться и другие действия (например, выставления фла- га изменения значения атрибута в свойстве set). А могут быть свойства без атрибутов, например, свойство получения текущей даты и времени: public DateTime DateTimeNow
    { get
    { return
    DateTime.Now;
    }
    }
    Если к какому-либо атрибуту происходит обращение только внутри класса, то такой атрибут не будет иметь методов доступа или свойств.
    Классы всегда имеют конструкторы. Конструктор – это такой метод, который вызывается в момент создания объекта. Даже если конструктор не задан явно, вызывается конструктор по умолчанию.
    Имя конструктора совпадает с именем класса. В конструкторе содержится код, который необходим для инициализации объекта. Конструкторов у клас- са может быть сколько угодно, главное, чтобы они имели разные сигнатуры.
    Бывают конструкторы без параметров и с параметрами. Конструктор без па- раметров не принимает при создании объекта таковых. Конструкторы по умолчанию всегда является конструктором без параметров. Пример исполь- зования конструктора без параметров при создании объекта:
    Point p1 = new Point();
    Здесь Point() – это не что иное, как вызов конструктора.
    Пример конструктора без параметров: public Point()
    {
    _X
    =
    0;
    _Y
    =
    0;

    5
    }
    Здесь создается объект класса точек с нулевыми значениями коорди- нат. В сигнатуре конструктора не указывается тип возвращаемого значения.
    Приведем пример конструктора с параметрами: public Point (int x, int y)
    {
    _X
    = x;
    _Y
    = y;
    }
    Здесь конструктор в качестве параметров принимает значения коорди- нат создаваемой точки. Таким образом, мы можем создать точку с опреде- ленными значениями координат:
    Point p1 = new Point(20, 50);
    Таким образом конструктор – это метод, вызываемый в момент созда- ния объекта, который имеет синтаксис обычного метода, за исключением то- го, что не указывается тип возвращаемого значения. Класс может иметь не- сколько конструкторов. Такую ситуацию называют перегрузкой конструкто- ров. Если создан хотя бы один конструктор (с параметрами или без), то кон- структор по умолчанию уже вызван быть не может!
    Приведем пример кода класса профилей пользователя. using
    System; using
    System.Collections.Generic; using
    System.Linq; using
    System.Web; namespace
    ООП
    { public class
    Пользователь
    { private string
    _Фамилия; public string
    Фамилия
    { get
    { return
    _Фамилия;
    } set
    {
    _Фамилия = value
    ;
    }
    } private string
    _Имя;

    6 public string
    Имя
    { get
    { return
    _Имя;
    } set
    {
    _Имя = value
    ;
    }
    } private string
    _Отчество; public string
    Отчество
    { get
    { return
    _Отчество;
    } set
    {
    _Отчество = value
    ;
    }
    } public
    Пользователь()
    {
    _Фамилия =
    ""
    ;
    _Имя =
    ""
    ;
    _Отчество =
    ""
    ;
    } public
    Пользователь(
    string фамилия, string имя, string отчество)
    {
    _Фамилия = фамилия;
    _Имя = имя;
    _Отчество = отчество;
    } public string
    Получить_ФИО()
    { return
    _Фамилия +
    " "
    + _Имя +
    " "
    + _Отчество;
    }
    }

    7
    }
    Обычно класс C# помещается в отдельном файле (хотя бывают и ис- ключения из этих правил). Вначале подключаются необходимые простран- ства имен: using
    System; using
    System.Collections.Generic; using
    System.Linq; using
    System.Web;
    Далее создается новое пространство имен (в нашем случае ООП): namespace ООП
    {
    ……………………
    }
    Пространство имен – это некое пространство, в котором мы можем об- ращаться к структурам по сокращенному имени. Например, когда мы нахо- димся в Санкт-Петербурге и набираем городской номер 555-55-55, мы наби- раем именно номер абонента, который находится в Санкт-Петербурге, а не в
    Москве, Минске, Череповце или Лондоне. Предполагается, что мы находим- ся в пространстве имен (в данном случае – телефонных номеров) города
    Санкт-Петербурга (812), который в свою очередь находится в пространстве имен (телефонных номеров) Российской Федерации (+7). Полностью номер будет выглядеть следующим образом:
    +7 812 555-55-55.
    Таким образом, указывая пространство имен с помощью оператора us- ing, мы определяем то пространство имен, в котором мы будем находится.
    Таким образом, мы можем использовать краткие имена, не беспокоясь о конфликтах одинаковых имен из разных пространств. Так, набирая город- ской телефонный номер, находясь в Санкт-Петербурге, будет установлена связь именно с абонентом петербургского номера, не смотря на то, что ана- логичные номера могут быть и в других городах. Как и в случае с телефон- ными номерами мы можем дать полное имя класса, указав через точку все пространства имен, в иерархии которых находится класс. Это обусловлено тем, что пространства имен могут вкладываться в друг друга: namespace Пространство_имен_1
    { namespace
    Пространство_имен_2
    { class Класс_1
    {
    }
    }
    }

    8
    Тогда полное имя класса Класс_1 будет выглядеть следующим обра- зом:
    Пространство_имен_1. Пространство_имен_1.Класс_1
    Ниже приведен код использования класса Пользователь путем создания двух объектов и манипуляции ими:
    Пользователь пользователь = new
    Пользователь(); пользователь.Фамилия =
    "Иванов"
    ; пользователь.Имя =
    "Иван"
    ; пользователь.Отчество =
    "Иванович"
    ;
    Пользователь пользователь2 = new
    Пользователь(
    "Петров"
    ,
    "Петр"
    ,
    "Петро- вич"
    );
    Label1.Text = пользователь.Получить_ФИО();
    Label2.Text = пользователь2.Получить_ФИО();
    Label3.Text = пользователь2.Имя; пользователь.Имя =
    "Иван"
    ;
    Label4.Text = пользователь.Получить_ФИО();
    Label5.Text = пользователь2.Получить_ФИО();
    Label1 – Label5 – объекты текстовых полей, куда может быть выведен текст. Объекты текстовых полей Label имеют свойство Text, с помощью ко- торого можно считать или установить выводимый текст.
    Статические члены класса
    Помимо атрибутов и методов, которые принадлежат объектам и вызы- ваются на объектах, которые являются экземплярами класса, существуют члены класса, всецело принадлежащих классу и вызываемых исключительно на классе. Такие члены класса называются статическими членами класса.
    Статические члены класса всегда присутствуют в программе в единственном экземпляре и не могут быть вызваны на объекте. Кроме того, статические ме- тоды не могут обращаться к нестатическим членам класса (атрибутам и ме- тодам). Приведем пример статического метода, суммирующего два целых числа: class Math
    {
    ……………. public static int Sum(int a, int b)
    { return a + b;
    }
    …………….
    }
    Осуществить вызов статического метода Sum() можно следующим об- разом:

    9 int s = Math.Sum(5, 25);
    Как видим, для того, чтобы вызвать статический метод не нужно созда- вать объект класса, в котором он объявлен, достаточно его вызвать, придер- живаясь следующего синтаксиса:
    Имя_класс.Имя_статического_метода(параметры);
    Более того, даже если и будет создан экземпляр класса (объект), содер- жащего статический метод, его вызов через и имя объекта (вызов на объекте) невозможен, так как статический метод (как и атрибут) принадлежит исклю- чительно классу, в котором он объявлен, а, следовательно, может быть вы- зван исключительно на классе.
    Наследование и полиморфизм
    Реализацию наследования в C# рассмотрим на примере классов Транс- портное_средство, Самолет и Автомобиль. Класс Транспортное_средство яв- ляется базовым классом (родительским классом, суперклассом) для классов
    Автомобиль и Самолет, которые являются дочерними (производными) клас- сами. Класс Транспортное_средство является обобщением (генерализацией) классов Автомобиль и Самолет. Напротив, классы Автомобиль и Самолет являются более специализированными классами, по отношению к классу
    Транспортное_средство, и таким образом можно говорить о специализации.
    Наследование, генерализация и специализация
    Когда один класс (дочерний), порождается от другого (базового), то он приобретает все члены классы, от которого он порождается. Такое приобре- тение дочерними классами членов базового класса называется наследовани- ем. Так, классы Автомобиль и Самолет унаследуют от базового класса
    Транспортное_средство атрибут Текущая_скорость и метод Парамет-

    10 ры_движения(). Причем наследование может быть как прямым, так и через другие классы.
    Иерархия классов транспортных средств
    Наследование атрибутов и методов класса Транспортное_средства дочерни- ми классами Автомобиль и Самолет

    11
    Наследование атрибутов и методов базового класса дочерними классами
    Приведем код классов Транспортное_средство, Автомобиль и Самолет. public class Транспортное_средство
    { public int Текущая_скорость { get; set; } public virtual string Получить_параметры_движения()
    { return "Текущая скорость: " + Текущая_скорость;
    }
    } public class Автомобиль : Транспортное_средство
    { public int Текущая_передача { get; set; } public override string Получить_параметры_движения()
    { return base.Получить_параметры_движения() + ", текущая передача: " +
    Текущая_передача;
    }
    } public class Самолет : Транспортное_средство

    12
    { public int Текущая_высота { get; set; } public override string Получить_параметры_движения()
    { return "Полет на высоте " + Текущая_высота + " со скоростью " +
    Текущая_скорость;
    }
    }
    Как видим, в дочерних классах может быть выполнено переопределе- ние методов базового класса (полиморфизм). Для этого метод базового клас- са должен быть объявлен как виртуальный (с помощью ключевого слова vir- tual), а в дочернем классе должен использоваться квалификатор override.
    ГЛАВА 4. АССОЦИАЦИИ МЕЖДУ КЛАССАМИ И КОЛЛЕКЦИИ
    ОБЪЕКТОВ
    В данной главе рассматривается реализация на C# ассоциаций между классами, а также классы коллекций, которые используются в отдельных ви- дах таких ассоциаций.
    Классы коллекций
    Коллекция – это объект, который может содержать набор других объ- ектов. В C# существует обширный набор классов коллекций, включая так называемые обобщенные коллекции, речь о которых и пойдет ниже. Коллек- ции являются обобщением массивов. В них преодолеваются недостатки при- сущие массивам, таки как фиксированный размер, невозможность добавле- ния и извлечения новых элементов, а только их перезапись, изменения раз- мера массивов. Коллекции позволяют хранить как переменные, так и объек- ты, причем обработка коллекций реализуется в C# унифицированным спосо- бом.
    Одним из наиболее распространенных классов коллекций является обобщенная коллекция List. Сразу следует заметить, что List в C# отличается от классической коллекции типа «список», обладая дополнительной функци- ональностью. Так, классические списки не позволяют произвольное обраще- ние к элементу, что реализовано в List.
    Рассмотрим пример использования класса обобщенных списков List.
    List
    <
    int
    > числа = new
    List
    <
    int
    >(); for
    (
    int i = 1; i < 11; i++)
    { числа.Add(i);

    13
    }
    Label1.Text = числа.Count.ToString(); числа.RemoveAt(4);
    Label2.Text = числа.Count.ToString();
    Метка.Text = числа[4].ToString();
    ListBox1.DataSource = числа;
    ListBox1.DataBind();
    В первой строке создается объект класса List, причем мы указываем, что в нем будут храниться целые числа.
    List
    <
    int
    > числа = new
    List
    <
    int
    >();
    Иными словами мы создаем коллекцию целых чисел. Сразу после создания список не содержит элементов – целых чисел, то есть коллекция является пу- стой.
    Далее, в цикле мы заполняем список целыми числами от одного до де- сяти. Элементы в список добавляются с помощью метода Add(): числа.Add(i);
    Далее, с помощью свойства Count мы определяем размер списка, т.е. сколько элементов в нем находится.
    Label1.Text = числа.Count.ToString();
    Значение свойства Count заносим в объект текстового поля, но так как поля текстовое, а значения свойства Count является целочисленным, то вы- зываем метод ToString(), который преобразует целочисленное значение в числовое. Особенностью C# является возможность вызова метода ToString() на любом объекте, включая целочисленную переменную или константу. Та- ким образом, приведенные ниже строки являются корректными. int a = 5; string s1 = a.ToString(); string s2 = 15.ToString();
    Далее в нашем примере мы удаляем элемент массива с индексом 4, вы- зывая метод RemoveAt(), в который передаем индекс удаляемого элемента. числа.RemoveAt(4);
    После выполнения данного метода будет удален пятый элемент. Это происходит потому, что в C#, как и во всех языках с C-подобным синтакси- сом индексация начинается с нуля.
    После этого число элементов в списке будет равно девяти:
    Label2.Text = числа.Count.ToString();
    А на позиции с индексом 4 будет находится число 6.
    Объекта класса список можно связать с элементами управления, выводящи- ми сразу несколько строк, например, с GridView:
    ListBox1.DataSource = числа;
    ListBox1.DataBind();

    14
    Помимо переменных в коллекциях, в частности в списке, можно хранить лю- бые объекты. Рассмотрим пример списка, содержащего объекты, которые яв- ляются экземплярами класса Персоналия.
    List<Персоналия> персоналии = new
    List<Персоналия>(); персоналии.Add(
    new
    Персоналия(
    "Иванов"
    ,
    "Иван"
    ,
    "Иванович"
    )); персоналии.Add(
    new
    Персоналия(
    "Петров"
    ,
    "Петр"
    ,
    "Петрович"
    )); персоналии.Add(
    new
    Персоналия(
    "Степанов"
    ,
    "Степан"
    ,
    "Степанович"
    ));
    GridView1.DataSource = персоналии;
    GridView1.DataBind();
    Обход коллекций может быть выполнен с помощью цикла foreach. Этот же цикл можно использовать для прохождения всех элементов массивов. Это возможно потому, что как коллекции, так и массивы, реализуют интерфейс
    IEnumerable.
    ЗАДАНИЕ НА ВЫПОЛНЕНИЕ КОНТРОЛЬНОЙ РАБОТЫ
    1. Разработать электронный паспорт изделия, который должен отра- жать информацию, представленную в таблице, согласно своему варианту
    (определяется последней цифрой студенческого билета).
    Отражаемая в элек- тронном паспорте информация
    Номер варианта
    1 2 3 4 5 6 7 8 9 0
    Номер изделия
    + + + + + + + + + +
    Серия изделия
    + + + + + + +
    Дата производства + + + + + + + + + +
    Дата отгрузки
    + + +
    Дата продажи
    + + + + +
    Гарантийный срок + + + + +
    Цена изделия
    + + + +
    ФИО продавца
    + + + +
    Наименование ре- гламентной работы
    + + + + + + + + + +
    Дата и время выпол- нения регламентной работы
    + + + + + + + + + +
    ФИО сервисного инженера
    + + + + +
    Идентификационный номер сервисного инженера
    + + + + +

    15
    Стоимость работы + + + + +
    2. Дать описание свойств навигации объектной модели для сущностных классов.
    3. Сгенерировать базу данных для сохранения объектов сущностных классов.
    ПРИМЕР ВЫПОЛНЕНИЯ КОНТРОЛЬНОЙ РАБОТЫ
    Задание:
    1. Разработать объектную модель электронного паспорта изделия.
    Электронный паспорт должен хранить информацию о номере и серии изде- лия, типе изделия, дате и времени производства изделия, а также информа- цию о проведенных регламентных работах, включая наименование регла- ментных работ, содержание работ, дату и время проведения и идентификатор сервисного инженера, выполнившего данную работу.
    2. Дать описание свойств навигации объектной модели для сущностных классов.
    3. Сгенерировать базу данных для сохранения объектов сущностных классов.
    Выполнение
    1. Для реализации электронного паспорта изделия, удовлетворяющего данным требованиям необходимо два класса:
    1) Класс электронного паспорта TechObject
    2) Класс регламентных работ MaintenanceWorks

    16
    Ниже представлен файл класса контекста TechObject, содержащий коллек- ции объектов сущностных классов EPasportSDO и
    MaintenanceWorksSet. namespace
    EPasportSDO
    { using
    System; using
    System.Data.Entity; using
    System.Data.Entity.Infrastructure; public partial class
    EModelContainer
    :
    DbContext
    { public
    EModelContainer()
    : base
    (
    "name=EModelContainer"
    )
    {
    } protected override void
    OnModelCreat‐
    ing(
    DbModelBuilder modelBuilder)
    { throw new
    UnintentionalCodeFirstException
    ();
    } public virtual
    DbSet
    <
    TechObject
    > TechObjectSet { get
    ; set
    ; }

    17 public virtual
    DbSet
    <
    MaintenanceWorks
    > Maintenance‐
    WorksSet { get
    ; set
    ; }
    }
    }
    Класс TechObject является основным классом системы. Ниже при‐
    веден код данного класса на алгоритмическом языке C#. namespace
    EPasportSDO
    { using
    System; using
    System.Collections.Generic; public partial class
    TechObject
    {
    [Sys‐
    tem.Diagnostics.CodeAnalysis.
    SuppressMessage
    (
    "Microsoft.Usag e"
    ,
    "CA2214:DoNotCallOverridableMethodsInConstructors"
    )] public
    TechObject()
    { this
    .MaintenanceWorks = new
    HashSet
    <
    MaintenanceWorks
    >();
    } public
    System.
    Guid
    Id { get
    ; set
    ; } public string
    Number { get
    ; set
    ; } public string
    Series { get
    ; set
    ; } public string
    Type { get
    ; set
    ; } public
    System.
    DateTime
    ProductionTime { get
    ; set
    ; }
    [Sys‐
    tem.Diagnostics.CodeAnalysis.
    SuppressMessage
    (
    "Microsoft.Usag e"
    ,
    "CA2227:CollectionPropertiesShouldBeReadOnly"
    )] public virtual
    ICollection
    <
    MaintenanceWorks
    > Mainte‐
    nanceWorks { get
    ; set
    ; }
    }
    }
    Ниже приведен исходный код класса объектов, содержащих информацию о проведении регламентных работ. namespace
    EPasportSDO
    {

    18 using
    System; using
    System.Collections.Generic; public partial class
    MaintenanceWorks
    { public
    System.
    Guid
    Id { get
    ; set
    ; } public string
    Title { get
    ; set
    ; } public string
    Desctiption { get
    ; set
    ; } public string
    Time { get
    ; set
    ; } public int
    EngineerID { get
    ; set
    ; } public virtual
    TechObject
    TechObject { get
    ; set
    ; }
    }
    }
    2. Свойством навигации класса EPasportSDO является public virtual
    ICollection
    <
    MaintenanceWorks
    > Maintenance‐
    Works { get
    ; set
    ; }
    Данное свойство содержит коллекцию объектов, содержащих информацию о проведении всех регламентных работ.
    Свойством навигации класса MaintenanceWorks является public virtual
    TechObject
    TechObject { get
    ; set
    ; }
    Данное свойство содержит ссылку на объект класса электронно‐
    го паспорта, для которого выполнена данная регламентная ра‐
    бота.
    3. Ниже приведен SQL код, определяющий структуру базы данных для хранения значений свойств (атрибутов) объектов сущностной модели:
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Entity Designer DDL Script for SQL Server 2005, 2008,
    2012 and Azure
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Date Created: 07/10/2016 17:20:06
    ‐‐ Generated from EDMX file: C:\Users\Admin\Documents\Visual
    Studio 2015\Projects\EPasportSDO\EPasportSDO\EModel.edmx
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    SET
    QUOTED_IDENTIFIER
    OFF
    ;
    GO
    USE
    [EPasport]
    ;
    GO

    19
    IF
    SCHEMA_ID
    (
    N'dbo'
    )
    IS
    NULL
    EXECUTE
    (
    N'CREATE SCHEMA
    [dbo]'
    );
    GO
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Dropping existing FOREIGN KEY constraints
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Dropping existing tables
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Creating all tables
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Creating table 'TechObjectSet'
    CREATE
    TABLE
    [dbo]
    [TechObjectSet]
    (
    [Id] uniqueidentifier
    NOT
    NULL,
    [Number] nvarchar
    (
    max
    )
    NOT
    NULL,
    [Series] nvarchar
    (
    max
    )
    NOT
    NULL,
    [Type] nvarchar
    (
    max
    )
    NOT
    NULL,
    [ProductionTime] datetime
    NOT
    NULL
    );
    GO
    ‐‐ Creating table 'MaintenanceWorksSet'
    CREATE
    TABLE
    [dbo]
    [MaintenanceWorksSet]
    (
    [Id] uniqueidentifier
    NOT
    NULL,
    [Title] nvarchar
    (
    max
    )
    NOT
    NULL,
    [Desctiption] nvarchar
    (
    max
    )
    NOT
    NULL,
    [Time] nvarchar
    (
    max
    )
    NOT
    NULL,
    [EngineerID] int
    NOT
    NULL,
    [TechObject_Id] uniqueidentifier
    NOT
    NULL
    );
    GO
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Creating all PRIMARY KEY constraints
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

    20
    ‐‐ Creating primary key on [Id] in table 'TechObjectSet'
    ALTER
    TABLE
    [dbo]
    [TechObjectSet]
    ADD
    CONSTRAINT
    [PK_TechObjectSet]
    PRIMARY
    KEY
    CLUSTERED
    (
    [Id]
    ASC
    );
    GO
    ‐‐ Creating primary key on [Id] in table 'Maintenance‐
    WorksSet'
    ALTER
    TABLE
    [dbo]
    [MaintenanceWorksSet]
    ADD
    CONSTRAINT
    [PK_MaintenanceWorksSet]
    PRIMARY
    KEY
    CLUSTERED
    (
    [Id]
    ASC
    );
    GO
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Creating all FOREIGN KEY constraints
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Creating foreign key on [TechObject_Id] in table 'Mainte‐
    nanceWorksSet'
    ALTER
    TABLE
    [dbo]
    [MaintenanceWorksSet]
    ADD
    CONSTRAINT
    [FK_TechObjectMaintenanceWorks]
    FOREIGN
    KEY
    (
    [TechObject_Id]
    )
    REFERENCES
    [dbo]
    [TechObjectSet]
    (
    [Id]
    )
    ON
    DELETE
    NO
    ACTION
    ON
    UPDATE
    NO
    ACTION
    ;
    GO
    ‐‐ Creating non‐clustered index for FOREIGN KEY
    'FK_TechObjectMaintenanceWorks'
    CREATE
    INDEX
    [IX_FK_TechObjectMaintenanceWorks]
    ON
    [dbo]
    [MaintenanceWorksSet]
    (
    [TechObject_Id]
    );
    GO
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐
    ‐‐ Script has ended
    ‐‐ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐


    написать администратору сайта