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

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 282 283 284 285 286 287 288 289 290 ... 407
    Перейти на страницу:
    class="p1">Все сущности, шаблоны которых созданы из базы данных AutoLot, будут обновлены для применения базового класса BaseEntity.

    Принадлежащий сущностный класс Person

    Сущности Customer и CreditRisk имеют свойства FirstName и LastName. Если в каждой сущности присутствуют одни и те же свойства, тогда можно извлечь выгоду от перемещения этих свойств в принадлежащие классы. Пример с двумя свойствами тривиален, но принадлежащие сущностные классы помогают сократить дублирование кода и повысить согласованность. В дополнение к двум свойствам внутри классов определяется еще одно свойство, отображаемое на вычисляемый столбец SQL Server.

    Создайте в каталоге Entities проекта AutoLot.Models новый каталог по имени Owned и добавьте в него новый файл Person.cs, содержимое которого показано ниже:

    using System.ComponentModel.DataAnnotations;

    using System.ComponentModel.DataAnnotations.Schema;

    using Microsoft.EntityFrameworkCore;

    namespace AutoLot.Models.Entities.Owned

    {

      [Owned]

      public class Person

      {

        [Required, StringLength(50)]

        public string FirstName { get; set; } = "New";

        [Required, StringLength(50)]

        public string LastName { get; set; } = "Customer";

        [DatabaseGenerated(DatabaseGeneratedOption.Computed)]

        public string? FullName { get; set; }

      }

    }

    Свойство FullName допускает null, т.к. до сохранения в базе данных новые сущности не будут иметь установленных значений. Финальная конфигурация свойства Fullname обеспечивается с использованием Fluent API.

    Сущность Car(Inventory)

    Для таблицы Inventory был создан шаблон сущностного класса по имени Inventory, но имя Car предпочтительнее. Исправить ситуацию легко: измените имя файла на Car.cs и имя класса на Car. Атрибут [Table] применяется корректно, так что нужно просто добавить схему dbo. Обратите внимание, что параметр Schema необязателен, поскольку по умолчанию для SQL Server принимается dbo, но он был включен ради полноты:

    [Table("Inventory", Schema = "dbo")]

    [Index(nameof(MakeId), Name = "IX_Inventory_MakeId")]

    public partial class Car : BaseEntity

    {

      ...

    }

    Обновите операторы using следующим образом:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.ComponentModel.DataAnnotations;

    using System.ComponentModel.DataAnnotations.Schema;

    using System.Text.Json.Serialization;

    using AutoLot.Models.Entities.Base;

    using Microsoft.EntityFrameworkCore;

    Унаследуйте класс Car от BaseEntity, после чего удалите свойства Id и TimeStamp, конструктор и директиву #pragma nullable disable. Вот как выглядит код класса после таких изменений:

    namespace AutoLot.Models.Entities

    {

      [Table("Inventory", Schema = "dbo")]

      [Index(nameof(MakeId), Name = "IX_Inventory_MakeId")]

      public partial class Car : BaseEntity

      {

        public int MakeId { get; set; }

        [Required]

        [StringLength(50)]

        public string Color { get; set; }

        [Required]

        [StringLength(50)]

        public string PetName { get; set; }

        [ForeignKey(nameof(MakeId))]

        [InverseProperty("Inventories")]

        public virtual Make Make { get; set; }

        [InverseProperty(nameof(Order.Car))]

        public virtual ICollection<Order> Orders { get; set; }

      }

    }

    В коде все еще присутствуют проблемы, которые необходимо устранить. Свойства Color и PetName определены как не допускающие null, но их значения не устанавливаются в конструкторе или не инициализируются в определении свойств. Проблема решается с помощью инициализаторов свойств. Кроме того, добавьте к свойству PetName атрибут [DisplayName], чтобы сделать название свойства более удобным для восприятия человеком. Обновите свойства, как показано ниже (изменения выделены полужирным):

    [Required]

    [StringLength(50)]

    public string Color { get; set; } = "Gold";

    [Required]

    [StringLength(50)]

    [DisplayName("Pet Name")]

    public string PetName { get; set; } = "My Precious";

    На заметку! Атрибут [DisplayName] используется инфраструктурой ASP.NET Core и будет описан в части VIII.

    Навигационное свойство Make потребуется переименовать в MakeNavigation и сделать допускающим null, а в обратном навигационном свойстве вместо "магической" строки должно применяться выражение nameof языка С#. Наконец, нужно удалить модификатор virtual. После всех модификаций свойство приобретает следующий вид:

    [ForeignKey(nameof(MakeId))]

    [InverseProperty(nameof(Make.Cars))]

    public Make? MakeNavigation { get; set; }

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

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

    [JsonIgnore]

    [InverseProperty(nameof(Order.CarNavigation))]

    public IEnumerable<Order> Orders { get; set; } = new List<Order>();

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

    [NotMapped]

    public string MakeName => MakeNavigation?.Name ?? "Unknown";

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

    public override string ToString()

    {

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

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

      return $"{PetName ?? "**No Name**"} is a {Color} {MakeNavigation?.Name}

        with ID {Id}.";

    }

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

    1 ... 282 283 284 285 286 287 288 289 290 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    2. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    3. Елена Елена08 июнь 11:13 Прочла несколько романов этого, без сомнения, талантливого автора. Впечатление прекрасное, но хотелось бы когда-нибудь прочесть... Предатель. Ты врал мне годами - Арина Арская
    Все комметарии
    Новинки бесплатной онлайн библиотеки