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

ЖАНРЫ

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

[Required]

[StringLength(50)]

public string Name { get; set; } = "Ford";

[JsonIgnore]

[InverseProperty(nameof(Car.MakeNavigation))]

public IEnumerable<Car> Cars { get; set; } = new List<Car>;

На этом сущностный класс

Make
завершен.

Сущность CreditRisk

Для таблицы

CreditRisks
был создан шаблонный
сущностный класс по имени
CreditRisk
. Приведите операторы
using
к такому виду:

using System.ComponentModel.DataAnnotations.Schema;

using AutoLot.Models.Entities.Base;

using AutoLot.Models.Entities.Owned;

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

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

namespace AutoLot.Models.Entities

{

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

public partial class CreditRisk : BaseEntity

{

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

public int CustomerId { get; set; }

[ForeignKey(nameof(CustomerId))]

[InverseProperty("CreditRisks")]

public virtual Customer Customer { get; set; }

}

}

Исправьте навигационное свойство, для чего удалите модификатор

virtual
, используйте выражение
nameof
в атрибуте
[InverseProperty]
и добавьте к имени свойства суффикс
Navigation
:

[ForeignKey(nameof(CustomerId))]

[InverseProperty(nameof(Customer.CreditRisks))]

public Customer? CustomerNavigation { get; set; }

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

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

Итак, сущностный класс

CreditRisk
закончен.

Сущность Order

Для таблицы

Orders
был создан шаблонный сущностный класс по имени
Order
. Модифицируйте операторы
using
следующим образом:

using System;

using System.ComponentModel.DataAnnotations.Schema;

using AutoLot.Models.Entities.Base;

using Microsoft.EntityFrameworkCore;

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

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

namespace AutoLot.Models.Entities

{

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

[Index(nameof(CarId), Name = "IX_Orders_CarId")]

[Index(nameof(CustomerId), nameof(CarId),

Name = "IX_Orders_CustomerId_CarId",
IsUnique = true)]

public partial class Order : BaseEntity

{

public int CustomerId { get; set; }

public int CarId { get; set; }

[ForeignKey(nameof(CarId))]

[InverseProperty(nameof(Inventory.Orders))]

public virtual Inventory Car { get; set; }

[ForeignKey(nameof(CustomerId))]

[InverseProperty("Orders")]

public virtual Customer { get; set; }

}

}

К именам навигационных свойств

Car
и
Customer
необходимо добавить суффикс
Navigation
. Навигационное свойство
Car
должно иметь тип
Car
, а не
Inventory
. В выражении
nameof
в обратном навигационном свойстве нужно применять
Car.Orders
вместо
Inventory.Orders
. В навигационном свойстве
Customer
должно использоваться выражение
nameof
для
InverseProperty
. Оба свойства должны быть сделаны допускающими значение
null
. Модификатор
virtual
понадобится удалить.

[ForeignKey(nameof(CarId))]

[InverseProperty(nameof(Car.Orders))]

public Car? CarNavigation { get; set; }

[ForeignKey(nameof(CustomerId))]

[InverseProperty(nameof(Customer.Orders))]

public Customer? CustomerNavigation { get; set; }

На этом сущностный класс

Order
завершен.

На заметку! В данный момент проект должен нормально компилироваться. Проект

AutoLot.Dal
не скомпилируется до тех пор, пока не будет обновлен класс
ApplicationDbContext
.

Сущность SeriLogEntry

База данных нуждается в дополнительной таблице для хранения журнальных записей. В проектах ASP.NET Core из части VIII будет применяться инфраструктура ведения журналов SeriLog, и один из вариантов предусматривает помещение журнальных записей в таблицу SQL Server. Хотя таблица будет использоваться через несколько глав, имеет смысл добавить ее сейчас.

Эта таблица не связана ни с одной из остальных таблиц и не задействует класс

BaseEntity
. Добавьте в каталог
Entities
новый файл класса по имени
SeriLogEntry.cs
и поместите в него следующий код:

using System;

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema;

using System.Xml.Linq;

namespace AutoLot.Models.Entities

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