2012-01-26 53 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; 
}