我有以下類(修剪以僅顯示基本結構):通用方法拾取基類的類型
public abstract class BaseModel {
public bool PersistChanges() {
// Context is of type "ObjectContext"
DatabaseHelper.Context.SafelyPersistChanges(this);
}
}
public static class ObjectContextExtensions {
public static bool SafelyPersistChanges<T>(this ObjectContext oc, T obj) {
// Persist the object using a transaction
}
}
[Persistent("LEADS")]
public class Lead : BaseModel {
// Extra properties
}
public class LeadsController : Controller {
public ActionResult Save(Lead lead) {
lead.PersistChanges()
}
}
我鉛類從BaseModel,其中包含一個方法來導出使用事務將對象的更改保存到數據庫中。我用擴展方法實現了事務持久化。問題是,通過傳遞這在我的BaseModel類到SafelyPersistChanges,對擴展方法的一般T設定爲BaseModel。但是,由於BaseModel未標記爲持久對象(不能這樣做),ORM框架將引發異常。
實施例:
Lead lead = LeadRepository.FindByNumber(2);
lead.SalesmanNumber = 4;
// Calls "ObjectContextExtensions.SafelyPersistChanges<BaseModel>(BaseModel obj)"
// instead of "ObjectContextExtensions.SafelyPersistChanges<Lead>(Lead obj)"
lead.PersistChanges();
上述塊引發以下例外:
無法爲沒有持久屬性類型 'SalesWeb.Data.BaseModel' 創建映射。
任何想法?
謝謝!它會產生代碼重複,但我想這只是我必須作出的犧牲。從好的方面來說,它使模型有機會在堅持自己之前執行其他操作。 – 2009-02-18 21:14:34