【问题标题】:ASP.NET MVC & Entity Framework stored proceduresASP.NET MVC 和实体框架存储过程
【发布时间】:2017-03-27 23:27:14
【问题描述】:

我的 ASP.NET MVC Web 应用程序需要使用 T-SQL 存储过程从现有数据库中获取数据。我已经看过有关如何使用代码优先方法执行此操作的教程(基本上对于名为 Product 的模型,实体框架会生成诸如 Product_UpdateProduct_Delete 等存储过程)。

但在我的情况下,我不能使用代码优先 b/c 数据库和存储过程已经存在,并且它们的名称不遵循此约定。怎么走?任何帮助将不胜感激。提前致谢。

  • 于 2017 年 3 月 28 日开始编辑

如果我像 Shyju 和 WillHua 所说的那样直接使用 ADO.NET 类,我的模型数据类上的数据注释会起作用吗?如果没有,还有什么方法可以实现验证等?

如果我遵循这种方法,我是否需要在我的项目中引用实体框架?

  • 2017-03-28 结束编辑

【问题讨论】:

  • 你总是可以使用old school ado.net (SqlCommand) 吗?

标签: asp.net-mvc stored-procedures ef-database-first


【解决方案1】:

如果您使用的是实体框架,您可以执行类似于以下的操作:

        var startDateParam = new SqlParameter("StartDate", 8) { Value = startDate };
        var endDateParam = new SqlParameter("EndDate", 8) { Value = endDate };
        var parameters = new[] { startDateParam, endDateParam };

        var result= Context.Database.SqlQuery<CampaignReferralReportItem>("CampaignReferralReportItems @StartDate, @EndDate", parameters).ToList<CampaignReferralReportItem>();
        return result;

所以你在这里得到的是两个参数的声明,它们被传递到存储过程“CampaignReferralReportItems”。查询完成后,结果将尽可能接近地映射到 CampaignReferralReportItem 类。

请记住,属性的顺序必须与查询结果相同,否则映射可能会引发异常。

值得注意的是,上面代码中所说的Context就是你的DataContext。

另外,在你开始到处乱扔这种代码之前。 Repository pattern

可能值得一看

【讨论】:

    【解决方案2】:

    我建议要么使用 Dapper,我打算使用它,并且喜欢它的速度 - 或者 Entity Framework, and 'Update model from Database' - so, a database first approach,其中引用了对 procs 的引用。

    但是,我建议使用 Dapper,因为它非常简单快捷。

    【讨论】:

      猜你喜欢
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多