Шрифт:
Интервал:
Закладка:
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. Модифицируйте операторы 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
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390}){
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.cs и поместите в него следующий код:
using System;
- Понимание SQL - Мартин Грубер - Базы данных