2012-01-26 70 views
17

我目前正在計劃將我的「手動查詢寫入」代碼切換到一個漂亮的SQL框架,因此我可以將查詢或sql事件留給框架,而不是自己編寫查詢。實體框架4:選擇單個記錄

現在我想知道如何從實體框架4中的表中獲取單個記錄?

我主要使用過像SELECT * FROM {0} WHERE Id = {1}這樣的SQL。就我而言,這在EF4中不起作用。

有沒有一種方法可以從我的上下文中選擇單個基於ID的記錄?

喜歡的東西:

public Address GetAddress(int addressId) 
{ 
    var result = from Context.Addresses where Address.Id = addressId; 

    Address adr = result as Address; 

    return Address; 
} 

謝謝!

回答

34
var address = Context.Addresses.First(a => a.Id == addressId); 
+0

謝謝!我怎樣才能訪問「地址」值?我可以簡單地將它轉換爲「Address」並通過address.Id,address.Property1輸入。或者我需要做一些地址[「Id」]或地址[「Property1」]? – SeToY

+0

是的,只需通過'int id = address.Id'即可訪問地址類的屬性值' – Ray

+0

好吧,所以不需要將它強制轉換爲「地址」類型?甜。謝謝! – SeToY

4

您可以使用SingleFirst方法。

這些方法之間的區別在於,Single需要一個單獨的行,並且如果它沒有單個行則引發異常。

用法是對他們倆

+0

單不與實體框架的工作,可惜... –

+4

單和的SingleOrDefault實際上在因爲查詢的頂部支持EF 4.0。 – divega

0

(基於VS 2015)同樣如果你創建的.edmx(添加 - > ADO.NET實體數據模型)。 enter image description here

執行創建「.edmx」的步驟並使用以下命令運行存儲過程。 emailAddress是您傳遞給存儲過程g_getLoginStatus的參數。這將拉動第一行到LoginStatusstatus是在數據庫中的列:

bool verasity = false; 
DBNameEntities db = new DBNameEntities(); // Use name of your DBEntities 

var LoginStatus = db.g_getLoginStatus(emailAddress).FirstOrDefault(); 

if ((LoginStatus != null) && (LoginStatus.status == 1)) 
{ 
     verasity = true; 
}