Если вам нужно использовать EF для этого, тогда ответ будет где-то между «нет» и «плохо».
Как насчет создания триггера БД, который обновляет свойство после вставки?
(в зависимости от вашей подсистемы БД, отправьте сюда)
CREATE FUNCTION some_funky_method() RETURNS trigger AS $$
BEGIN
-- whatever implemenation of your logic
NEW."UpdatedProperty" := NEW."Id" * 666;
RETURN NEW;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER update_property_on_insert
AFTER INSERT ON your_table
FOR EACH ROW
EXECUTE PROCEDURE some_funky_method();
ОБНОВЛЕНИЕ
Нет способа сделать это с EntityFramework и автоматически увеличенными идентификаторами.Идентификатор генерируется последовательностью БД во время вставки, и в этом все дело.Если вы не можете использовать триггер, любое другое решение было бы только уродливым хаком, приводящим к повторному вызову базы данных в какой-то момент.
Конечно, вы могли бы предсказать Id с помощью запроса состояния последовательности, но обычно это оченьплохая идея.
Однако, если есть возможность, есть еще один вариант - изменить первичный ключ с INT на GUID .На этом этапе вы можете самостоятельно сгенерировать Id и использовать его для всего до вставки.
public class MyEntity {
public Guid Id { get; set; }
public string SomethingElse { get; set; }
(...)
}
entity.Id = Guid.NewGuid();
entity.SomethingElse = /* Do something with the Id */ entity.Id.ToString();
_db.SaveChanges();