使用实体框架数据库调用存储过程第一种方法

时间:2017-02-13 18:51:09

标签: sql-server entity-framework asp.net-mvc-4 stored-procedures ef-database-first

我一直坚持通过asp.net mvc执行存储过程。我正在使用Entity Framework第5版,数据库第一种方法。我想执行一个存储的参数,其参数通过前端网页传递。

存储过程返回包含所有列的表。该表是StaggingInternal,因此sp返回:ù

select * from stagginginternal.

使用EF,在我的asp.net mvc应用程序中,我使用edmx设计器来获取sp,然后在模型浏览器中我选择sp作为实体的返回类型。该实体的名称是徘徊在内部。

但每次尝试执行sp时都会出现异常。例外是:

  

发生了'System.ArgumentException'类型的异常   EntityFramework.SqlServer.dll但未在用户代码中处理

     

附加信息:对象类型不存在映射   System.Data.Entity.Infrastructure.DbQuery 1[[<>f__AnonymousTyped 1 [[System.String,   mscorlib,版本= 4.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089]],NewWeb,版本= 1.0.0.0,   Culture = neutral,PublicKeyToken = null]]到已知的托管提供商   本地类型。

代码段:

var servername = from p in db2.AppClientServerDatabaseRelationships
              join q in db2.AppServers on p.ServerID equals q.ServerID
              where p.clientID == clientid
              select new {  q.ServerName };

var databasename = from p in db2.AppClientServerDatabaseRelationships
               join q in db2.AppDatabaseNames on p.DatabaseID equals q.DatabaseID
               where p.clientID == clientid
               select new { q.DatabaseName };

var datefrom = "01/01/2017";
var dateto = "01/01/2017";

var serverparameter = new SqlParameter("@serverName", servername);
var dbparameter = new SqlParameter("@awDatabase", databasename);
var dtTo = new SqlParameter("@dtTo", dateto);
var dtFrom = new SqlParameter("@dtFrom", datefrom);

List<Object> Parameters = new List<Object>();

Parameters.Add(serverparameter);
Parameters.Add(dbparameter);
Parameters.Add(dtTo);
Parameters.Add(dtFrom);

var result = db2.Database.SqlQuery<StaggingInternal>("exec App_aw_Internal @serverName,@awDatabase,@dtTo,@dtFrom",
  Parameters.ToArray()).ToList<StaggingInternal>();

我不确定我哪里出错了。有什么想法吗?

此外,如果有什么不清楚,请告诉我。

谢谢!

0 个答案:

没有答案