2012-01-26 33 views
17

Tôi hiện đang lên kế hoạch chuyển mã "truy vấn bằng tay" thành một khung SQL đẹp, vì vậy tôi có thể để lại các truy vấn hoặc các thứ sql cho khung công tác, thay vì tự viết các truy vấn .Entity Framework 4: Chọn Single Record

Bây giờ tôi tự hỏi làm thế nào tôi có thể nhận được một bản ghi duy nhất từ ​​bảng của tôi trong Entity Framework 4?

Tôi đã sử dụng SQL chủ yếu như SELECT * FROM {0} WHERE Id = {1}. Điều đó không hiệu quả trong EF4, theo như tôi quan tâm.

Có cách nào tôi có thể chọn một bản ghi dựa trên ID duy nhất từ ​​Ngữ cảnh của mình không?

Cái gì như:

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

    Address adr = result as Address; 

    return Address; 
} 

Cảm ơn bạn!

Trả lời

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

Cảm ơn bạn! Làm thế nào tôi có thể truy cập vào các giá trị "địa chỉ"? Tôi có thể chỉ đơn giản là đưa nó vào "Địa chỉ" và nhập nó qua address.Id, address.Property1? Hoặc tôi có cần phải làm điều gì đó như địa chỉ ["Id"] hoặc địa chỉ ["Property1"] không? – SeToY

+0

Có, chỉ đơn giản là bạn có thể truy cập giá trị tài sản của lớp Địa chỉ thông qua 'int id = address.Id' – Ray

+0

Được rồi, vì vậy không cần phải bỏ nó để nhập "Địa chỉ"? Ngọt. Cảm ơn bạn! – SeToY

4

Bạn có thể sử dụng phương thức Single hoặc First.

Sự khác biệt giữa các phương thức đó là Single mong đợi một hàng duy nhất và ném ngoại lệ nếu nó không có một hàng.

Việc sử dụng là như nhau cho cả hai

+0

Độc thân không làm việc với Entity Framework, không may ... –

+4

Độc thân và SingleOrDefault đang thực sự được hỗ trợ ở phía trên cùng của truy vấn từ EF 4.0. – divega

0

(Dựa trên VS 2015) Nếu bạn tạo một .edmx (Add -> ADO.NET Entity Data Model). enter image description here

Thực hiện các bước để tạo ".edmx" và sử dụng các bước sau để chạy thủ tục được lưu trữ. emailAddress là thông số bạn đang chuyển đến thủ tục được lưu trữ g_getLoginStatus. Điều này sẽ kéo hàng đầu tiên vào LoginStatusstatus là một cột trong cơ sở dữ liệu:

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; 
} 
Các vấn đề liên quan