Обязательные отношения — это такие отношения, при которых зависимая сущность
null. Для обязательных отношений стандартным поведением является Cascade. В табл. 22.6 описано каскадное поведение с зависимыми сущностями и влияние на записи базы данных при использовании SQL Server.Соглашения, связанные с сущностями
В EF Core принято много соглашений для определения сущности и ее связи с хранилищем данных. Соглашения всегда включены, если только они не отменены аннотациями данных или кодом Fluent API. В табл. 22.7 перечислены наиболее важные соглашения EF Core.
Во всех предшествующих примерах навигационных свойств для построения отношений между таблицами были задействованы соглашения EF Core.
Отображение свойств на столбцы
По соглашению открытые свойства для чтения и записи отображаются на столбцы с теми же самыми именами. Типы данных столбцов соответствуют эквивалентам для типов данных CLR свойств, принятым в хранилище данных. Свойства, не допускающие null
null, а свойства, допускающие null, устанавливаются так, чтобы значение null было разрешено. Инфраструктура EF Core поддерживает ссылочные типы, допускающие null, которые появились в C# 8. Для поддерживающих полей EF Core ожидает их именования с применением одного из следующих соглашений (в порядке старшинства):• _<имя свойства в "верблюжьем" стиле>
• _<имя свойства>
• m_<имя свойства в "верблюжьем" стиле>
• m_<имя свойства>
В случае обновления свойства Color
Car для использования поддерживающего поля (по соглашению) оно получило бы имя _color, _Color, m_color или m_Color, как показано ниже:private string _color = "Gold";
public string Color
{
get => _color;
set => _color = value;
}
Аннотации данных Entity Framework
Аннотации данных — это атрибуты С#, которые применяются для дальнейшего придания формы вашим сущностям. В табл. 22.8 описаны самые часто используемые аннотации данных, предназначенные для определения деталей того, как ваши сущностные классы и свойства сопоставляются с таблицами и полями базы данных. Аннотации данных переопределяют любые конфликтующие соглашения. В оставшемся материале главы и книги вы увидите еще много аннотаций, которые можно применять для уточнения сущностей в модели.
В следующем коде показан класс BaseEntity
Id первичным ключом. Вторая аннотация свойства Id указывает, что оно является столбцом Identity в базе данных SQL Server. Свойство TimeStamp в SQL Server будет столбцом timestamp/rowversion (для проверки параллелизма, рассматриваемой позже в главе).using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public abstract class BaseEntity
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[TimeStamp]
public byte[] TimeStamp { get; set; }
}
Вот класс Car
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;
[Table("Inventory", Schema="dbo")]
[Index(nameof(MakeId), Name = "IX_Inventory_MakeId")]
public class Car : BaseEntity
{
[Required, StringLength(50)]
public string Color { get; set; }
[Required, StringLength(50)]
public string PetName { get; set; }
public int MakeId { get; set; }
[ForeignKey(nameof(MakeId))]
public Make MakeNavigation { get; set; }
[InverseProperty(nameof(Driver.Cars))]
public IEnumerable
}
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT