[InverseProperty(nameof(Customer.Orders))]

public Customer? CustomerNavigation { get; set; }

На этом сущностный класс Order завершен.

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

<p id="AutBody_Root970"><strong>Сущность SeriLogEntry</strong></p>

База данных нуждается в дополнительной таблице для хранения журнальных записей. В проектах 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

{

  [Table("SeriLogs", Schema = "Logging")]

  public class SeriLogEntry

  {

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    public int Id { get; set; }

    public string? Message { get; set; }

    public string? MessageTemplate { get; set; }

    [MaxLength(128)]

    public string? Level { get; set; }

    [DataType(DataType.DateTime)]

    public DateTime? TimeStamp { get; set; }

    public string? Exception { get; set; }

    public string? Properties { get; set; }

    public string? LogEvent { get; set; }

    public string? SourceContext { get; set; }

    public string? RequestPath { get; set; }

    public string? ActionName { get; set; }

    public string? ApplicationName { get; set; }

    public string? MachineName { get; set; }

    public string? FilePath { get; set; }

    public string? MemberName { get; set; }

    public int? LineNumber { get; set; }

    [NotMapped]

    public XElement? PropertiesXml

      => (Properties != null)? XElement.Parse(Properties):null;

  }

}

Итак, сущностный класс SeriLogEntry закончен.

На заметку! Свойство TimeStamp в сущностном классе SeriLogEntry отличается от свойства TimeStamp в классе BaseEntity. Имена совпадают, но в этой таблице оно хранит дату и время регистрации записи в журнале (что будет конфигурироваться как стандартная настройка SQL Server), а не rowversion в других сущностях.

<p id="AutBody_Root971"><strong>Класс ApplicationDbContext</strong></p>

Пришло время обновить файл ApplicationDbContext.cs. Начните с приведения операторов using к такому виду:

using System;

using System.Collections;

using System.Collections.Generic;

using AutoLot.Models.Entities;

using AutoLot.Models.Entities.Owned;

using Microsoft.EntityFrameworkCore;

using Microsoft.EntityFrameworkCore.Storage;

using Microsoft.EntityFrameworkCore.ChangeTracking;

using AutoLot.Dal.Exceptions;

Файл начинается с конструктора без параметров. Удалите его, т.к. он не нужен. Следующий конструктор принимает экземпляр DbContextOptions и пока подходит. Перехватчики событий для DbContext и ChangeTracker добавляются позже в главе.

Свойства DbSet необходимо сделать допускающими null, имена скорректировать, а модификаторы virtual удалить. Теперь новую сущность для ведения журнала необходимо добавить. Перейдите к свойствам DbSet и модифицируйте их следующим образом:

public DbSet? LogEntries { get; set; }

public DbSet? CreditRisks { get; set; }

Перейти на страницу:

Похожие книги