Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 432 433 434 435 436 437 438 439 440 ... 642

[InverseProperty(<b>nameof(Make.Cars)</b>)]

public Make? MakeNavigation { get; set; }

На заметку! Модификатор virtual необходим для ленивой загрузки. Поскольку ленивая загрузка в примерах книги не используется, модификатор virtual будет удаляться из всех свойств внутри уровня доступа к данным.

Для навигационного свойства Orders требуется атрибут [Jsonlgnore], чтобы предотвратить циклические ссылки JSON при сериализации объектной модели. В шаблонном коде обратное навигационное свойство задействует выражение nameof, но его понадобится обновить, т.к. имена всех навигационных свойств типа ссылок будут содержать суффикс Navigation. Последнее изменение связано с тем, что свойство должно иметь тип IEnumerable&lt;Order&gt;, а не ICollection&lt;Order&gt;, и инициализироваться с применением нового экземпляра List&lt;Order&gt;. Изменение не является обязательным, потому что ICollection&lt;Order&gt; тоже будет работать. Более низкоуровневый тип IEnumerable&lt;T&gt; предпочтительнее использовать с навигационными свойствами типа коллекций IEnumerable&lt;T&gt; (поскольку интерфейсы IQueryable&lt;T&gt; и ICollection&lt;T&gt; унаследованы от IEnumerable&lt;T&gt;). Модифицируйте код, как показано далее:

<b>[JsonIgnore]</b>

[InverseProperty(nameof(Order.Car<b>Navigation</b>))]

public <b>IEnumerable</b>&lt;Order&gt; Orders { get; set; } = <b>new List&lt;Order&gt;()</b>;

Затем добавьте свойство NotMapped, которое будет отображать значение Make экземпляра Car, устранив необходимость в классе CarViewModel из главы 21. Если связанная информация Make была извлечена из базы данных с записью Car, то значение MakeName отображается. Если связанные данные не были извлечены, тогда для свойства отображается строка Unknown (т.е. производитель не известен). Как вы должны помнить, свойства с атрибутом [NotMapped] не относятся к базе данных и существуют только внутри сущности. Добавьте следующий код:

[NotMapped]

public string MakeName =&gt; MakeNavigation?.Name ?? &quot;Unknown&quot;;

Переопределите ToString() для отображения информации о транспортном средстве:

public override string ToString()

{

  // Поскольку столбец PetName может быть пустым,.

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  // определить стандартное имя **No Name**

  return $&quot;{PetName ?? &quot;**No Name**&quot;} is a {Color} {MakeNavigation?.Name}

    with ID {Id}.&quot;;

}

Добавьте к свойству MakeId атрибуты [Required] и [DisplayName]. Несмотря на то что инфраструктура EF Core считает свойство MakeId обязательным, т.к. оно не допускает значение null, механизму проверки достоверности ASP.NET Core нужен атрибут [Required]. Ниже приведен модифицированный код:

<b>[Required]</b>

<b>[DisplayName(&quot;Make&quot;)]</b>

public int MakeId { get; set; }

Финальное изменение заключается в добавлении свойства IsDrivable типа bool, не допускающего значения null, с поддерживающим полем, допускающим null, и отображаемым именем:

private bool? _isDrivable;

[DisplayName(&quot;Is Drivable&quot;)]

public bool IsDrivable

{

  get =&gt; _isDrivable ?? false;

  set =&gt; _isDrivable = value;

}

На этом обновление сущностного класса Car завершено.

Сущность Customer

Для таблицы Customers был создан шаблонный сущностный класс по имени Customer. Приведите операторы using к следующему виду:

using System;

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations.Schema;

using System.Text.Json.Serialization;

using AutoLot.Models.Entities.Base;

using AutoLot.Models.Entities.Owned;

Унаследуйте класс Customer от BaseEntityn удалите свойства Id и TimeStamp. Удалите конструктор и директиву #pragma nullable disable, после чего добавьте атрибут [Table] со схемой. Удалите свойства FirstName и LastName, т.к. они будут заменены принадлежащим сущностным классом Person. Вот как выглядит код в настоящий момент:

namespace AutoLot.Models.Entities

1 ... 432 433 434 435 436 437 438 439 440 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий