EF Core: условно вычисляемый столбец - PullRequest
0 голосов
/ 06 июля 2019

В моей модели у меня есть свойство AccountType, которое в основном генерируется триггером базы данных, но иногда его также можно назначить напрямую:

public class Account
{
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public int AccountType { get; set; }
}

Атрибут [DatabaseGenerated] позволяет автоматически возвращать значение, сгенерированное базой данных.всякий раз, когда databaseContext.SaveChanges () выполняется.Однако этот атрибут, по-видимому, также препятствует отправке значения, если я хочу явно назначить AccountType.Каков наилучший способ реализовать такой «частично» сгенерированный / вычисляемый столбец?

1 Ответ

0 голосов
/ 10 июля 2019

Однако этот атрибут, по-видимому, также препятствует отправке значения, если я хочу явно назначить AccountType.Каков наилучший способ реализации такого «частично» сгенерированного / вычисляемого столбца?

Если вы хотите установить явное значение для свойства, декорированного с помощью [DatabaseGenerated(DatabaseGeneratedOption.Computed)], вам необходимо перейти к нижнемуAPI метаданных уровня и установите AfterSaveBehavior / BeforeSaveBehavior, как показано ниже:

  1. IMutableProperty.BeforeSaveBehavior Свойство используется для состояния добавления

    modelBuilder.Entity<Test>()
             .Property(t => t.TestType)
             .Metadata.BeforeSaveBehavior=PropertySaveBehavior.Save;
    
  2. Свойство IMutableProperty.AfterSaveBehavior используется для состояния обновления

    modelBuilder.Entity<Test>()
             .Property(t => t.TestType)
             .Metadata.AfterSaveBehavior =PropertySaveBehavior.Save;
    

PropertySaveBehavior указывает, как изменяетсязначение свойства будет обрабатываться отслеживанием изменений Entity Framework, которое, в свою очередь, будет определять, отправляется ли набор значений в базу данных или нет.

...