Подтвердить что ты не робот

Entity framework: StoreGeneratedPattern = "Вычисленное" свойство

У меня есть свойство DateTime. Мне нужно, чтобы это значение по умолчанию было DateTime.Now. И затем я узнал, что вы можете указать атрибут StoreGeneratedPattern="Computed" и установить его в (getdate()) в SQL. Это работает успешно. Но я не могу изменить это свойство в коде. Иногда мне нужно изменить это свойство на любое значение DateTime. Но мои изменения не сохраняются.

4b9b3361

Ответ 1

Установка этого свойства в Computed сообщает EF, что вы не можете установить значение напрямую. Как ты мог? Это свойство существует для вычисляемых столбцов, которые по определению не сохраняются обратно в базу данных.

К сожалению, для свойства EF "Значение по умолчанию" могут быть установлены только значения, известные во время компиляции, и поэтому не DateTime.Now

Эта ссылка обеспечивает достойное обходное решение:

Установка значения по умолчанию для свойства DateTime в DateTime.Now внутри значения System.ComponentModel Default Attrbute


Вы также можете обрабатывать событие 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
            }
    }