我有一个现有的存储过程来插入数据。相同的SP我希望在插入值后返回一个int值。
我的问题是,如何首先编写与EF代码相关的c#代码?
返回数字为0或1.插入值为“a”或“b”
答案 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()