2011-02-25 78 views

回答

1

通常這是將實體的PK屬性的值與定義的未保存值進行比較。最常見的情況是有一個int PK沒有定義未保存的值,例如:

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

在這種情況下,未保存的值是0,所以你可以比較ID的值與0,如果找出它是暫時的或不是。

如果您希望更一般地做到這一點,您可以從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 2011-03-01 13:34:26

相關問題