Язык программирования 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
):
Поделиться с друзьями: