我有以下性质的复杂类型的SalesOrderHeader: ORDERNUMBER 客户名称 CUSTOMERNUMBER PODate 评论 发票编号填充在实体框架的复杂类型
我已经创建了一个存储过程(功能进口)来填充这些属性。在我的程序中说uspGetDetails我使用:
首先选择语句来获取前4个属性OrderNumber,CustomerName,CustomerNumber,PODate。
其次选择Proprty提取评论
第三选择属性获取InvoiceNumber如下
CREATE PROCEDURE uspGetHeaderDetails
-- Add the parameters for the stored procedure here
@OrderNumber CHAR(21)
AS
BEGIN
DECLARE @Counter INT;
DECLARE @OrignalNumber INT;
SELECT @Counter = count(*) FROM sop10100 WHERE sopnumbe = @OrderNumber
IF @Counter > 0
BEGIN
SELECT TOP 1 sopnumbe [OrderNumber]
, custname [CustomerName]
, custnmbr [CustomerNumber]
, cstponbr [CustomerPhoneNumber]
, docdate [PODate]
, orignumb [OriginalNumber]
FROM sop10100
WHERE sopnumbe = @OrderNumber
END
ELSE
BEGIN
SELECT TOP 1 sopnumbe [OrderNumber]
, custname [CustomerName]
, custnmbr [CustomerNumber]
, cstponbr [CustomerPhoneNumber]
, docdate [PODate]
, orignumb [OriginalNumber]
FROM SOP30200
WHERE sopnumbe = @OrderNumber
END
SELECT cmmttext [Comments]
FROM sop10106 WHERE sopnumbe = @OrderNumber
SELECT sopnumbe [InvoiceNumber]
FROM sop30200 WHERE orignumb = @OrderNumber
END
而下面是我的方法来执行这个过程来填充的SalesOrderHeader
[AcceptVerbs("POST")]
public ActionResult SearchResult(FormCollection collection)
{
string orderNumber = collection["searchItem"].ToString();
Models.SalesEntities db = new Models.SalesEntities();
ObjectParameter[] parameters = new ObjectParameter[1];
parameters[0] = new ObjectParameter("OrderNumber", orderNumber);
var headerResult = db.ExecuteFunction<Models.SalesOrderHeader>("uspGetHeaderDetails", parameters);
Models.SalesOrderHeader salesOrderHeader = new Models.SalesOrderHeader();
salesOrderHeader = headerResult.SingleOrDefault();
return View(salesOrderHeader);
}
问题:当我执行这个,我得到一个错误,说不兼容的数据,作为函数导入我只提取第一个查询的结果。没有选择第二个和第三个查询(即注释和发票号码)的结果。
是否有可能通过存储过程中的多个查询来填充一个复杂类型? 如果没有,那么完成这个的其他方法是什么?