返回基于EF Code First的值

时间:2014-12-26 19:43:48

标签: entity-framework stored-procedures

我有一个现有的存储过程来插入数据。相同的SP我希望在插入值后返回一个int值。

我的问题是,如何首先编写与EF代码相关的c#代码?

返回数字为0或1.插入值为“a”或“b”

1 个答案:

答案 0 :(得分:2)

您可以使用SqlQuery

执行任意查询和过程
using (var context = new MyContext()) 
{ 
    var input = "a";
    var result = context.Database.SqlQuery<int>("dbo.MyProc @param",    
                                                new SqlParameter("@param", input))
                        .FirstOrDefault();
   // use result
}

@param是您SPROC的输入参数名称(&#39; a&#39;,&#39; b&#39;),<int>是该类型的参数。结果。您还可以以相同的方式绑定返回的实体。我们已参数化input以避免Sql Injection问题

var result = context.Database.SqlQuery<int>("dbo.MyProc @param",    
                                            new SqlParameter("@param", input))
                    .FirstOrDefault();

编辑,重新学生

与从SPROC返回的简单整数标量不同,Students听起来像EF模型中的第一类实体,并且应该创建为DbSets - 这样您就可以使用LINQ的所有功能{1}}转换为Sql。

但是,是的,如果你有一个已经为你过滤的PROC,你可以使用:

var students = context.Database.SqlQuery<Student>("dbo.MyProc @param",    
                                            new SqlParameter("@param", input)))
                      .ToList() 

这将匹配匹配Student属性的所有列并绑定它们。 或者,如果Student已经是DbSet<>的实体,则会出现DbSet.SqlQuery重载:

var students = context.Students.SqlQuery("dbo.MyProc @param",    
                                            new SqlParameter("@param", input))) 
                      .ToList()