我目前正在返回一个集合,然后抓取第一个项目,但必须有一种方法只返回一个结果集。
以下是我现在所拥有的:
ICollection<SomeTestDTO> results =
this.Context.Database.SqlQuery<SomeTestDTO>(
"[myStoredProcedure1] @p1, @p2", p1, p2).Cast<SomeTestDTO>().ToList();
如何将其转换为返回SomeTestDTO的单个实例?
另外,如果我的codefirst类SomeTestDTO没有准确地映射返回的列,我应该使用像常规模型中的[Column(“abc123”)]属性吗?
答案 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();