Обычно это делается путем сравнения значения свойства PK объекта с определенным несохраненным значением.Наиболее распространенным случаем является наличие int PK без определенного несохраненного значения, например:
[PrimaryKey]
public virtual int Id {get;set;}
В этом случае несохраненное значение равно 0, поэтому вы можете просто сравнить значение Id с 0, чтобы найтиout, если он временный или нет.
Если вы хотите сделать это более обобщенно, вы можете получить несохраненное значение из модели ActiveRecord и сравнить его с использованием отражения, например (непроверенный!):
var entity = new MyEntity();
var pk = ActiveRecordModel.GetModel(typeof(MyEntity)).PrimaryKey;
var unsavedValue = pk.PrimaryKeyAtt.UnsavedValue;
var convertedUnsavedValue = Convert.ChangeType(unsavedValue, pk.Property.PropertyType);
var pkValue = pk.Property.GetValue(aform, null);
var transient = Equals(convertedUnsavedValue, pkValue);
Это, вероятно, завершится ошибкой в лице нулевого значения UnsavedValues (в этом случае вы должны сравнить его со значением по умолчанию типа PK), но оно должно помочь вам начать работу.