[英]ASP.NET MVC 4 joining 2 tables in stored Procedure but giving only one table's data
我是ASP.NET MVC 4的新手; 使用数据库第一方法 。 根据我的问题,我正在使用SQL存储过程来检索数据以填充我的jQgrid。 但是它正在检索来自Org表的OrgName以外的所有BO表数据(在存储过程中查看)。 所以我该怎么做才能获得OrgName ???
我的存储过程如下:
ALTER PROCEDURE [dbo].[GetBODetails]
AS
BEGIN
SELECT b.Id, b.OrgId, b.Code, b.Name, o.Name AS OrgName
FROM Org AS o INNER JOIN BO AS b ON o.Id = b.OrgId
END
Columns of BO table :
Id = GUID
Code = NVARCHAR(50)
Name = NVARCHAR(50)
OrgId = Foreign Key ref from Org table Id
Columns of BO table :
Id = GUID
Name = NVARCHAR(50)
通过在“模型浏览器”窗口中执行“添加功能导入”,在我的MVC项目中使用了此过程;请参考本文单击此处 。 在执行此操作时,我选择“返回实体的集合为BO模型”。
BO和Org生成的模型如下:
BO.cs
public partial class BO
{
public System.Guid Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public System.Guid OrgId { get; set; }
public virtual Org Org { get; set; }
}
组织
public partial class Org
{
public Org()
{
this.BOes = new HashSet<BO>();
}
public System.Guid Id { get; set; }
public string Name { get; set; }
public virtual ICollection<BO> BOes { get; set; }
}
控制器执行存储过程的代码:
private iregEntities m_oDbCont = new iregEntities();
// GET: /BO/
public JsonResult BOGrid()
{
m_oDbCont.Configuration.ProxyCreationEnabled = false;
var BOList = m_oDbCont.GetBODetails().ToList(); // Executing stored procedure
var JsonBOList = new
{
rows = (
from BOData in BOList
select new
{
id = BOData.Id.ToString(),
cell = new string[] { BOData.OrgId.ToString(), BOData.Code, BOData.Name }
}).ToArray()
};
return Json(JsonBOList, JsonRequestBehavior.AllowGet); returning data into JSON format
}
protected override void Dispose(bool disposing)
{
m_oDbCont.Dispose();
base.Dispose(disposing);
}
在执行函数导入时,要求创建一个新的复杂类型,而不是将结果映射到BO
实体。 如果映射到BO
实体,则只有该实体会被数据填充,这就是Org
为空的原因。
映射到复杂类型时,EF将自动创建一个新类,其中包含SP返回的所有列。
当SP返回特定实体时,将SP结果映射到特定实体非常有用,这样可以避免每次导入SP时都创建无用的复杂类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.