我想實現一個泛型類,將與一個通用的存儲庫進行交互,除了當我不得不處理從存儲庫獲取對象時,一切都很好。如何在使用泛型類時通過PK查詢EF?
我將在通用類中有一個虛擬方法,它將收到一個int
,並且我想用這個int
來形成一個對存儲庫的查詢,通過它們的主鍵獲取對象。我有一種感覺,我需要在EF中使用EntityKey
屬性,但不太確定。
無論如何,這裏就是我想要的代碼做的,我希望有人會對如何來完成我想建議:
public virtual T Get(int PrimaryKey) {
this.Repository.Select(
t =>
(t.PRIMARYKEY == PrimaryKey)).Single();
}
我要擴展這個類提供更專業化的類,但因爲他們大多數只通過查詢PK來獲得他們的對象,這使我有一個基本的方法可以做到這一點。
在此先感謝您的任何建議!
UPDATE
所以,這裏的地方我已經得到了反映,我懷疑它的正確方法,但有些作品...我收到該消息LINQ一個NotSupportedException
到實體無法識別方法'System.Object GetValue(System.Object,System.Object [])'方法,並且此方法無法轉換爲存儲表達式。。雖然我明白它說什麼和爲什麼它說,我不知道如何在我的代碼看起來像這樣克服:
private readonly string TEntityName = typeof(T).Name;
public virtual T Get(
int PrimaryKey) {
return this.Repository.Select(
t =>
(((int)t.GetType().GetProperties().Single(
p =>
(p.Name == (this.TEntityName + "Id"))).GetValue(t, null)) == PrimaryKey)).Single();
}
希望有人誰知道如何使用反射,不像我,可以點我在正確的方向。謝謝!
Hi @ RPM1984,很高興再次見到你!我正在考慮通過一個表達式,但我想稍微刪除這個要求。例如,我的應用程序分層爲:`Supervisor` - >`Provider` - >`Repository`。這是我試圖推廣的'提供者'。有了一個表達式(即使是簡單解決方案),我必須在「Supervisor」層中完成它,並將它傳遞給「Repository」。最後會有很多重複,這是我想嘗試和避免的。我認爲反射可能會出現,但不知道反映了什麼... – Gup3rSuR4c 2011-01-08 01:23:19