Атрибут [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.
ApplicationDbContext
dotnet ef database update ReplaceTimeStamp
-c AutoLot.Samples.ApplicationDbContext
Теперь база данных соответствует вашей модели.
Аннотации и навигационные свойства
Аннотация ForeignKey
<ИмяТипа>Id автоматически станет свойством внешнего ключа, но в предыдущем примере оно было установлено явно. Такой подход обеспечивает отличающиеся стили именования, а также наличие в таблице более одного внешнего ключа. Кроме того, улучшается читабельность кода.Свойство InverseProperty
InverseProperty требуется, когда сущность связана с другой сущностью несколько раз, и вдобавок делает код более читабельным.Интерфейс Fluent API
С помощью интерфейса Fluent API сущности приложения конфигурируются посредством кода С#. Методы предоставляются экземпляром ModelBuilder
OnModelCreating класса DbContext. Интерфейс Fluent API является самым мощным способом конфигурирования и переопределяет любые конфликтующие между собой соглашения или аннотации данных. Некоторые конфигурационные параметры доступны только через Fluent API, скажем, стандартные значения для настроек и каскадное поведение для навигационных свойств.Отображение классов и свойств
В следующем коде воспроизведен предыдущий пример Car
modelBuilder.Entity
{
entity.ToTable("Inventory","dbo");
entity.HasKey(e=>e.Id);
entity.HasIndex(e => e.MakeId, "IX_Inventory_MakeId");
entity.Property(e => e.Color)
.IsRequired
.HasMaxLength(50);
entity.Property(e => e.PetName)
.IsRequired
.HasMaxLength(50);
entity.Property(e => e.TimeStamp)
.IsRowVersion
.IsConcurrencyToken;
});
Бьёрн Страуструп , Ирина Сергеевна Козлова , Бьерн Страуструп , Валерий Федорович Альмухаметов
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT