Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
ApplicationDbContext
dotnet ef database update ReplaceTimeStamp
-c AutoLot.Samples.ApplicationDbContext
Теперь база данных соответствует вашей модели.
Аннотации и навигационные свойства
Аннотация
ForeignKey
<ИмяТипа>Id
Свойство
InverseProperty
InverseProperty
Интерфейс Fluent API
С помощью интерфейса Fluent API сущности приложения конфигурируются посредством кода С#. Методы предоставляются экземпляром
ModelBuilder
OnModelCreating()
DbContext
Отображение классов и свойств
В следующем коде воспроизведен предыдущий пример
Car
modelBuilder.Entity<Car>(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();
});
Если создать и запустить миграцию прямо сейчас, то вы обнаружите, что ничего не изменилось, поскольку вызываемые методы Fluent API соответствуют текущей конфигурации, определенной соглашениями и аннотациями данных.
Стандартные значения
Интерфейс Fluent API предлагает методы, позволяющие устанавливать стандартные значения для столбцов. Стандартное значение может иметь тип значения или быть строкой SQL. Например, вот как установить стандартное значение
Color
Car
Black
modelBuilder.Entity<Car>(entity =>
{
...
entity.Property(e => e.Color)
.HasColumnName("CarColor")
.IsRequired()
.HasMaxLength(50)
<b> .HasDefaultValue("Black");</b>
});
Чтобы установить значение для функции базы данных (вроде
getdate()
HasDefaultValueSql()
Car
DateTime
DateBuilt
getdate()
modelBuilder.Entity<Car>(entity =>
{
...
entity.Property(e => e.DateBuilt)
.HasDefaultValueSql("getdate()");
});
Как и в случае применения SQL для вставки записи, если свойство, которое отображается на столбец со стандартным значением, имеет значение, когда EF Core вставляет запись, то вместо стандартного значения столбца будет использоваться значение свойства. Если значение свойства равно
null
Проблема возникает при наличии стандартного значения у типа данных свойства. Вспомните, что стандартное значение для числовых типов составляет
0
false
0
false
Например, добавьте в класс
Car
bool
IsDrivable
true
// Car.cs
public class Car : BaseEntity
{
...
<b> public bool IsDrivable { get; set; }</b>
}