[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
{
[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
в других сущностях.
Класс ApplicationDbContext
Пришло время обновить файл 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
public DbSet