2011-02-25 11 views
1

タイトルはかなり私がやろうとしていることを意味します。オブジェクトインスタンスが一時的であるかどうかを知る方法はありますか? (または、少なくとも、まだ保存されていませんでしたか?)城ActiveRecord - オブジェクトインスタンスが一時的であるかどうかをどのように知るのですか?

ありがとうございました!

PS:Existsメソッドを使用していません。

答えて

1

これは通常、エンティティのPKプロパティの値と定義済みの保存されていない値を比較して行われます。最も一般的なケースは、例えば、定義されて保存されていない値なしint型のPKを持っている:この場合

[PrimaryKey] 
public virtual int Id {get;set;} 

保存されていない値が0であるので、あなただけかどうかを調べるには0とIdの値を比較することができますそれは一過性であるかどうかです。

もっと一般的にこれを行うには、保存されていない値を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タイプのデフォルト値と比較すべきである)、それはあなたが始める必要があります。

+0

ありがとうございます!正常に動作します... :) – marcoaoteixeira

関連する問題