Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

with ID {Id}.";

}

Добавьте к свойству

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

[Required]

[DisplayName("Make")]

public int MakeId { get; set; }

Финальное

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

private bool? _isDrivable;

[DisplayName("Is Drivable")]

public bool IsDrivable

{

get => _isDrivable ?? false;

set => _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

{

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

public partial class Customer : BaseEntity

{

[InverseProperty(nameof(CreditRisk.Customer))]

public virtual ICollection<CreditRisk> CreditRisks { get; set; }

[InverseProperty(nameof(Order.Customer))]

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

}

}

Подобно сущностному классу

Car
в коде по-прежнему присутствуют проблемы, которые необходимо устранить, к тому же понадобится добавить принадлежащий сущностный класс. К навигационным свойствам нужно добавить атрибут
[Jsonlgnore]
, атрибуты обратных навигационных свойств потребуется обновить с использованием суффикса
Navigation
,
типы необходимо изменить на
IEnumerable<T>
с инициализацией, а модификатор
virtual
удалить. Ниже показан модифицированный код:

[JsonIgnore]

[InverseProperty(nameof(CreditRisk.CustomerNavigation))]

public IEnumerable<CreditRisk> CreditRisks { get; set; } =

new List<CreditRisk>;

[JsonIgnore]

[InverseProperty(nameof(Order.CustomerNavigation))]

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

Осталось лишь добавить свойство с типом принадлежащего сущностного класса. Отношение будет позже сконфигурировано посредством Fluent API.

public Person PersonalInformation { get; set; } = new Person;

Итак, обновление сущностного класса

Customer
окончено.

Сущность Make

Для таблицы

Makes
был создан шаблонный сущностный класс по имени
Make
. Операторы
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;

Унаследуйте класс

Make
от
BaseEntity
и удалите свойства
Id
и
TimeStamp
. Удалите конструктор и директиву
#pragma nullable disable
, а затем добавьте атрибут
[Table]
со схемой. Вот текущий код сущностного класса:

namespace AutoLot.Models.Entities

{

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

public partial class Make : BaseEntity

{

[Required]

[StringLength(50)]

public string Name { get; set; }

[InverseProperty(nameof(Inventory.Make))]

public virtual ICollection<Inventory> Inventories { get; set; }

}

}

В представленном далее коде демонстрируется инициализированное свойство

Name
, не допускающее
null
, и скорректированное навигационное свойство
Cars
(обратите внимание на изменение имени
Inventory
на
Car
в выражении
nameof
):

Поделиться с друзьями: