Язык программирования C#9 и платформа .NET5
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<b>[ForeignKey(nameof(CustomerId))]</b><b>[InverseProperty(nameof(Customer.CreditRisks))]</b><b>public Customer? CustomerNavigation { get; set; }</b>Финальное изменение заключается в добавлении свойства с типом принадлежащего сущностного класса. Отношение будет позже сконфигурировано посредством Fluent API.
public Person PersonalInformation { get; set; } = new Person();Итак, сущностный класс
закончен.CreditRiskСущность Order
Для таблицы
был создан шаблонный сущностный класс по имениOrders. Модифицируйте операторыOrderследующим образом:usingusing 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(<b>Car</b>.Orders))]public <b>Car?</b> Car<b>Navigation</b> { get; set; }[ForeignKey(nameof(CustomerId))][InverseProperty(<b>nameof(Customer.Orders)</b>)]public Customer? CustomerNavigation { get; set; }На этом сущностный класс
завершен.OrderНа заметку! В данный момент проект должен нормально компилироваться. Проект
не скомпилируется до тех пор, пока не будет обновлен классAutoLot.Dal.ApplicationDbContextСущность SeriLogEntry
База данных нуждается в дополнительной таблице для хранения журнальных записей. В проектах ASP.NET Core из части VIII будет применяться инфраструктура ведения журналов SeriLog, и один из вариантов предусматривает помещение журнальных записей в таблицу SQL Server. Хотя таблица будет использоваться через несколько глав, имеет смысл добавить ее сейчас.
Эта таблица не связана ни с одной из остальных таблиц и не задействует класс
. Добавьте в каталогBaseEntityновый файл класса по имениEntitiesи поместите в него следующий код:SeriLogEntry.csusing System;