如何使用EF 6和codefirst返回单个结果集?

时间:2014-01-02 19:33:55

标签: c# entity-framework

我目前正在返回一个集合,然后抓取第一个项目,但必须有一种方法只返回一个结果集。

以下是我现在所拥有的:

ICollection<SomeTestDTO> results =
   this.Context.Database.SqlQuery<SomeTestDTO>(
     "[myStoredProcedure1] @p1, @p2", p1, p2).Cast<SomeTestDTO>().ToList();

如何将其转换为返回SomeTestDTO的单个实例?

另外,如果我的codefirst类SomeTestDTO没有准确地映射返回的列,我应该使用像常规模型中的[Column(“abc123”)]属性吗?

2 个答案:

答案 0 :(得分:2)

 this.Context.Database.SqlQuery<SomeTestDTO>(
 "[myStoredProcedure1] @p1, @p2", p1, p2).Cast<SomeTestDTO>().FirstOrDefault ();

或者您也可以使用SingleOrDefault()但请注意,如果有多个结果,则会抛出异常。

答案 1 :(得分:1)

这有点偏僻,但将存储过程作为函数导入EF上下文可能会更优雅。

打开模型浏览器,然后导航到myStoredProcedure1。右键单击并选择“添加函数导入”。这将打开一个向导,您可以在其中指定存储过程与EF实体之间的映射。

一旦完成,使用EF上下文中的存储过程的语法非常简单:

  SomeTestDTO dto = context.myStoredProcedure1(p1, p2).SingleOrDefault();

参考:http://msdn.microsoft.com/en-us/data/gg699321.aspx