2014-12-26 83 views
1

我有一个现有的存储过程来插入数据。同样的SP我想在插入值后返回一个int值。返回值基于EF代码优先

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

返回是数字0或1的插入件的值是“a”或“B”

回答

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是输入的名称执行任意查询和特效param('a','b')给你的SPROC,<int>是结果的类型参数。您也可以绑定以相同方式返回的实体。我们已经参数input避免SQL注入问题

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

编辑,重新学生从存储过程返回

与简单的整数标量,Students声音就像在你的EF型号一流的实体,并应该创建为DbSets - 这样你就可以使用LINQ翻译到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() 
+0

谢谢您的帮助!如果我需要检索大量数据“列表 SStudent = ....”,写它还是需要做更多? – KLN

+0

@KLN你是否回复了错误的东西?你的原始问题或这个答案都不与学生有任何关系。 –

+0

@KLN学生听起来像EF模型中的一流实体,应该创建为“DbSets” - 这样您就可以将LINQ转换的所有功能用于Sql。但是,是的,如果你有一个已经为你过滤的PROC,你可以替换'result = context.Database.SqlQuery (...)'或'result = context.Students.SqlQuery(...)'if学生已经是一个拥有'DbSet <>'的实体。 – StuartLC