2013-12-19 29 views
1

我想查詢我的數據庫基於EntityKey是否有一個inbuild(或更簡單的方法)來做到這一點?SqlQuery EntityKey並返回相應的對象

我目前的做法,將是這樣的:

using (var context = new DbContext()) 
{ 
    context.DataBase.SqlQuery<TestTable>("select * from @p0 where @p1 = @p2", EntityKey.EntitySetName, EntityKey.EntityKeyValues[0].Name, EntityKey.EntityKeyValues[0].Value); 
} 

(該解決方案目前有問題,該EntitySetName心不是在表名和我需要搶表名了元數據,同樣與也可能不同於數據庫的Id的名稱)

或者甚至有沒有辦法使用LINQ來做到這一點? (我願意,因爲我不會需要手動翻譯)

+0

烏爾Q不是很清楚..你有什麼錯誤? – Rupesh

+0

@Rupesh:我得到絕對沒有錯誤,我只想知道是否有一種方法來查詢數據庫的EntityKey屬性的幫助下,您發佈在您的答案中的鏈接對我來說沒有用,因爲我已經使用EntityFramework。我的問題只是如何實現這一點,只有EntityKey。 –

+0

有沒有理由不能使用'context.Set ().Find(EntityKey.EntityKeyValues [0] .Value)'? –

回答

1

如果您知道正在檢索的實體的類型,您可以使用DbContext上的Set方法獲得DbSet,並使用Find方法DbSet通過其鍵獲取實體。

var dbSet = dbContext.Set<TestTable>(); 
var entity = dbSet.Find(EntityKey.EntityKeyValues[0].Value); 

Find方法知道如何使用鍵值來獲取實體;實際上,簽名是Find(params object[]),所以如果您的表具有複合鍵(只要它們的順序正確),則可以傳遞多個鍵值。

+0

爲您提供+50,因爲此解決方案不需要投射到IObjectContextAdapter。 –

2

你可以投你DbContextIObjectContextAdapter接口,並從那裏你可以訪問底層ObjectContext對象,它具有GetObjectByKey method

using (var context = new DbContext()) 
{ 
    var objectContext = ((IObjectContextAdapter)context).ObjectContext; 
    var entity = objectContext.GetObjectByKey(yourEntityKey); 
} 
+0

如果我沒有弄錯,這隻適用於已經加載並且與這個上下文相關並且不查詢數據庫的。 –

+0

不,根據msdn它應該查詢db:「如果對象當前沒有加載到對象上下文中,則執行查詢以嘗試從數據源返回對象。」 – nemesv

相關問題