У меня есть свойство DateTime
. Мне нужно, чтобы это значение по умолчанию было DateTime.Now
. И затем я узнал, что вы можете указать атрибут StoreGeneratedPattern="Computed"
и установить его в (getdate())
в SQL. Это работает успешно. Но я не могу изменить это свойство в коде. Иногда мне нужно изменить это свойство на любое значение DateTime. Но мои изменения не сохраняются.
Entity framework: StoreGeneratedPattern = "Вычисленное" свойство
Ответ 1
Установка этого свойства в Computed сообщает EF, что вы не можете установить значение напрямую. Как ты мог? Это свойство существует для вычисляемых столбцов, которые по определению не сохраняются обратно в базу данных.
К сожалению, для свойства EF "Значение по умолчанию" могут быть установлены только значения, известные во время компиляции, и поэтому не DateTime.Now
Эта ссылка обеспечивает достойное обходное решение:
Вы также можете обрабатывать событие SavingChanges
в своем контексте и добавлять значения по умолчанию там, но это происходит только тогда, когда вы на самом деле вызываете SaveChanges()
, а не когда объект создан.
partial void OnContextCreated() {
this.SavingChanges += new EventHandler(AccrualTrackingEntities_SavingChanges);
}
void AccrualTrackingEntities_SavingChanges(object sender, EventArgs e) {
List<Invoice> Invoices = this.ObjectStateManager
.GetObjectStateEntries(System.Data.EntityState.Added | System.Data.EntityState.Modified)
.Select(entry => entry.Entity)
.OfType<Invoice>().ToList();
foreach(Invoice I in Invoices)
if (I.EntityState == System.Data.EntityState.Added) {
//set default values
} else {
//?? whatever
}
}