Kniga-Online.club
» » » » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать бесплатно Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

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

{

<b>  [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]</b>

  public int Id { get; set; }

<b>  [TimeStamp]</b>

  public byte[] TimeStamp { get; set; }

}

Вот класс Car и аннотации данных, которые придают ему форму в базе данных:

using System.Collections.Generic;

using System.ComponentModel.DataAnnotations;

using System.ComponentModel.DataAnnotations.Schema;

using Microsoft.EntityFrameworkCore;

<b>[Table(&quot;Inventory&quot;, Schema=&quot;dbo&quot;)]</b>

<b>[Index(nameof(MakeId), Name = &quot;IX_Inventory_MakeId&quot;)]</b>

public class Car : BaseEntity

{

<b>  [Required, StringLength(50)]</b>

  public string Color { get; set; }

<b>  [Required, StringLength(50)]</b>

  public string PetName { get; set; }

  public int MakeId { get; set; }

<b>  [ForeignKey(nameof(MakeId))]</b>

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  public Make MakeNavigation { get; set; }

<b>  [InverseProperty(nameof(Driver.Cars))]</b>

  public IEnumerable&lt;Driver&gt; Drivers { get; set; }

}

Атрибут [Table] сопоставляет класс Car с таблицей Inventory в схеме dbo (атрибут [Column]применяется для изменения имени столбца или типа данных). Атрибут [Index] создает индекс на внешнем ключе MakeId. Два строковых поля установлены как [Required] и имеющие максимальную длину(StringLength) в 50 символов. Атрибуты [InverseProperty] и [ForeignKey] объясняются в следующем разделе.

Ниже перечислены отличия от соглашений EF Core:

• переименование таблицы из Cars в Inventory;

• изменение типа данных столбца TimeStamp из varbinary(max) на timestamp в SQL Server;

• установка типа данных и допустимости значения null для столбцов Color и PetName вместо nvarchar(max)/null в nvarchar(50)/не null;

• переименование индекса в MakeId.

Остальные используемые аннотации соответствуют конфигурации, определенной соглашениями EF Core.

Если вы создадите миграцию и попробуете ее применить, то миграция потерпит неудачу. СУБД SQL Server не разрешает изменять любой тип данных существующего столбца на timestamp. Столбец должен быть удален и затем воссоздан. К сожалению, инфраструктура миграций не позволяет удалять и воссоздавать, а пытается изменить столбец.

Вот как проще всего решить проблему: поместить свойство TimeStamp в комментарий внутри базовой сущности, создать и применить миграцию, убрать комментарий со свойства TimeStamp и затем создать и применить еще одну миграцию.

Закомментируйте свойство TimeStamp вместе с аннотацией данных и выполните следующие команды:

dotnet ef migrations add RemoveTimeStamp -o Migrations

 -c AutoLot.Samples.

ApplicationDbContext

dotnet ef database update RemoveTimeStamp

 -c AutoLot.Samples.ApplicationDbContext

Уберите комментарий со свойства TimeStamp и аннотации данных и выполните показанные далее команды, чтобы добавить свойство TimeStamp в таблицу как столбец timestamp:

dotnet ef migrations add ReplaceTimeStamp -o Migrations

 -c AutoLot.Samples.

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

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*