Замок ActiveRecord - Как я узнаю, является ли экземпляр объекта временным? - PullRequest
1 голос
/ 25 февраля 2011

Название довольно означает, что я пытаюсь сделать. Есть способ узнать, является ли экземпляр объекта временным? (Или, по крайней мере, еще не был сохранен?)

Спасибо всем!

PS .: не использует метод Exists.

1 Ответ

1 голос
/ 25 февраля 2011

Обычно это делается путем сравнения значения свойства 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), но оно должно помочь вам начать работу.

...