Как предотвратить обновление столбца в EF Core 3.1?
Я обновил.Net Core 2.2 до 3.1, и эта функция устарела.
modelBuilder
.Entity<Order>()
.Property(e => e.CreationTime)
.ValueGeneratedOnAddOrUpdate()
.Metadata.IsStoreGeneratedAlways = true;
Мне нужен EF для вставки, но заблокировать обновление.
Благодарность!
2 ответа
Согласно Снятые с имуществом реализации:
public virtual bool IsStoreGeneratedAlways
{
get => AfterSaveBehavior == PropertySaveBehavior.Ignore || BeforeSaveBehavior == PropertySaveBehavior.Ignore;
set
{
if (value)
{
BeforeSaveBehavior = PropertySaveBehavior.Ignore;
AfterSaveBehavior = PropertySaveBehavior.Ignore;
}
else
{
BeforeSaveBehavior = PropertySaveBehavior.Save;
AfterSaveBehavior = PropertySaveBehavior.Save;
}
}
}
эквивалентный код должен установить BeforeSaveBehavior
а также AfterSaveBehavior
к Ignore
.
Также с BeforeSaveBehavior
а также AfterSaveBehavior
свойства были заменены на Get
/ Set
пары методов, потребуется ввести временную переменную для хранения метаданных свойства.
Что-то вроде этого:
var creationTime = modelBuilder
.Entity<Order>()
.Property(e => e.CreationTime)
.ValueGeneratedOnAddOrUpdate()
.Metadata;
creationTime.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
creationTime.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
Согласно официальной документации, IsStoreGeneratedAlways устаревает с версии 3.1.
Сборка Microsoft.EntityFrameworkCore.Metadata:
Если Throw, то будет сгенерировано исключение, если этому свойству будет присвоено новое значение после того, как объект существует в базе данных.
Если "Игнорировать", то любое изменение значения свойства сущности, которая уже существует в базе данных, будет проигнорировано.
Вам следует попробовать что-то вроде этого:
modelBuilder
.Entity<Order>()
.Property(e =>.CreationTime).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);