我正在尝试使用实体6.0调用存储过程。在查看这些解决方案here和here后,他们没有解决问题。问题是其中一个返回的列中有一个空格(我无法更改存储过程)。我已经尝试了以下但没有成功:
MyModel.cs
using System;
...
namespace ...
{
public class MyModel
{
[Display(Name = "ID")]
public string id{ get; set; }
[Display(Name = "Number Of ID")]
[Column("Number Of ID")]
public int number_Of_ID { get; set; }
}
public class MyModelContext : DbContext
{
public DbSet<MyModel> MyModels{ get; set; }
}
}
MyController.cs
using System;
...
namespace ...
{
public class MyController : Controller
{
private MyEntities db = new MyEntities ();
public ActionResult Index()
{
var query = @"exec usp_getIds";
var results = db.Database.SqlQuery<MyModel>(query);
return View(results);
}
}
调试代码时,我的模型的值为id
,但不是number_Of_ID
。该值始终为0.我还尝试将数据类型更改为string
,并返回null
。请帮忙。
答案 0 :(得分:1)
您的意思是列名称或值中是否有空格?
对于存储过程usp_getIds,您应该能够:
List<usp_getIds_Result> results = db.usp_getIds().ToList();
将过程添加到模型时,会自动创建类usp_getIds_Result
。
看看尝试这个是否有帮助。
答案 1 :(得分:1)
虽然我无法使用DBContext
,但我找到了使用SQLDataAdapter
的解决方案。即使对于有空格的列,我也能成功地进行调用。控制器中更改了以下内容:
MyController.cs
using System;
...
namespace ...
{
public class MyController : Controller
{
public ActionResult Index()
{
var myResultsList = new List<MyModel>();
string connectionString = ConfigurationManager.AppSettings["myDBConn"];
var conn = new SqlConnection(connectionString);
conn.Open();
string query = @"usp_getIds";
using (var sqlAdpt = new SqlDataAdapter(query, conn))
{
sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure;
var results = new DataSet();
sqlAdpt.Fill(results);
myResultsList= results.Tables[0].AsEnumerable().
Select(dataRow => new MyModel
{
id = dataRow.Field<string>("ID"),
numberOfID = dataRow.Field<int>("Number Of ID")
}).ToList();
}
return View(myResultsList);
}
}