【问题标题】:Entity Framework 4: Selecting Single Record实体框架 4:选择单个记录
【发布时间】:2012-02-19 10:21:56
【问题描述】:

我目前正计划将我的“手动查询编写”代码切换到一个不错的 SQL 框架,这样我就可以将查询或 sql 内容留给框架,而不是自己编写查询。

现在我想知道如何从 Entity Framework 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;
}

谢谢!

【问题讨论】:

  • 我会使用“Context.Addresses.Find(id)”(编写和执行速度更快!)

标签: entity-framework select entity-framework-4 record


【解决方案1】:
var address = Context.Addresses.First(a => a.Id == addressId);

【讨论】:

  • 谢谢!然后如何访问“地址”值?我可以简单地将其转换为“地址”并通过 address.Id、address.Property1 输入吗?还是我需要做类似地址[“Id”]或地址[“Property1”]之类的事情?
  • 是的,您可以通过'int id = address.Id'访问Address类的属性值
  • 好的,所以不需要强制转换为“地址”?甜的。谢谢!
  • 可以使用address.Foo、address.Bar等
  • 我也会考虑使用 FirstOrDefault 方法。没有例外(昂贵),而是空的“对象”。
【解决方案2】:

您可以使用SingleFirst 方法。

这些方法之间的区别在于 Single 需要单行,如果没有单行则抛出异常。

两者的用法是一样的

【讨论】:

  • 自 EF 4.0 起,查询顶部实际上支持 Single 和 SingleOrDefault。
【解决方案3】:

(基于 VS 2015)如果您创建 .edmx(添加 --> ADO.NET 实体数据模型)。

完成创建“.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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多