无法首先使用 EF6 代码从数据库调用 "select" 存储过程
Unable to call "select" stored procedure using EF6 code first from database
此代码失败并出现错误:"Must declare the scalar value @prodID"。有什么建议吗?
using (var ctx = new StewieDataModel())
{
string productID = "81";
var techData = ctx.Database.SqlQuery<TechData>("dbo.usp_DS_GetTechData @prodID", productID).ToList();
}
这是模型:
namespace DatasheetData
{
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
public partial class StewieDataModel : DbContext
{
public StewieDataModel()
: base("name=StewieConnectionString")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
}
这是我要填充的class:
namespace DatasheetData
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("usp_DS_GetTechData")]
public partial class TechData
{
public string TestCategory { get; set; }
public string TestName { get; set; }
public string TestResultLabel { get; set; }
public string TestResult { get; set; }
public string TestMethod { get; set; }
}
}
以下是我在 SSMS 中成功调用它的方式:
DECLARE @return_value int
EXEC @return_value = [dbo].[usp_DS_GetTechData]
@prodID = "81"
SELECT 'Return Value' = @return_value
GO
SSMS 结果是四列 VarChar 数据:
您需要将参数作为 SqlParameter
对象传递。这样的事情应该有效:
var techData = ctx.Database.SqlQuery<TechData>(
"dbo.usp_DS_GetTechData @prodID",
new SqlParameter("prodID", productID)
).ToList();
一个 shorthand 替代 DavidG 的正确答案是:
var techData = ctx.Database.SqlQuery<TechData>(
"dbo.usp_DS_GetTechData @prodID = {0}", productID).ToList();
作为explained here.
此代码失败并出现错误:"Must declare the scalar value @prodID"。有什么建议吗?
using (var ctx = new StewieDataModel())
{
string productID = "81";
var techData = ctx.Database.SqlQuery<TechData>("dbo.usp_DS_GetTechData @prodID", productID).ToList();
}
这是模型:
namespace DatasheetData
{
using System;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
public partial class StewieDataModel : DbContext
{
public StewieDataModel()
: base("name=StewieConnectionString")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
}
}
这是我要填充的class:
namespace DatasheetData
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("usp_DS_GetTechData")]
public partial class TechData
{
public string TestCategory { get; set; }
public string TestName { get; set; }
public string TestResultLabel { get; set; }
public string TestResult { get; set; }
public string TestMethod { get; set; }
}
}
以下是我在 SSMS 中成功调用它的方式:
DECLARE @return_value int
EXEC @return_value = [dbo].[usp_DS_GetTechData]
@prodID = "81"
SELECT 'Return Value' = @return_value
GO
SSMS 结果是四列 VarChar 数据:
您需要将参数作为 SqlParameter
对象传递。这样的事情应该有效:
var techData = ctx.Database.SqlQuery<TechData>(
"dbo.usp_DS_GetTechData @prodID",
new SqlParameter("prodID", productID)
).ToList();
一个 shorthand 替代 DavidG 的正确答案是:
var techData = ctx.Database.SqlQuery<TechData>(
"dbo.usp_DS_GetTechData @prodID = {0}", productID).ToList();
作为explained here.