有几件事要尝试。
- Use 变量表相反 -> 也许导入向导更喜欢这样?
- 命名您的返回字段。
尝试使用以下存储过程(未经测试..只是大声思考......)
CREATE PROCEDURE dbo.Foo
AS
SET NOCOUNT ON
DECLARE @ResultTable TABLE (SomeId INTEGER)
INSERT INTO @ResultTable
SELECT DISTINCT Id AS Identity -- Or u can rename this field to anything...
FROM SomeExistingTableWhichHasAnIdentityField
GO
现在尝试一下,看看向导是否刷新。
--
尝试#2:)
好的..当 EF 设计器/向导/任何东西无法准确地弄清楚我的存储过程应该返回什么时,我通常会执行以下操作:-
- 确保存储过程根本不存在于 EF 设计器/上下文等中。(您有一个干净的起点)
- 打开您的存储过程并
/* /*
注释掉一切在过程定义之后。
eg..
ALTER PROCEDURE dbo.Foo
(
Bar1 INT,
Bar2 TINYINT,
... // whatever u have as your optional input arguments //
)
AS
SET NOCOUNT ON
/*
.... every thing in here is commented out
*/
GO
现在 ...
3. 在存储过程中添加强制假返回,这(或多或少)只是defines输出结构/字段。
eg..
ALTER PROCEDURE dbo.Foo
(
Bar1 INT,
Bar2 TINYINT,
... // whatever u have as your optional input arguments //
)
AS
SET NOCOUNT ON
SELECT 1 AS Id, 1 AS UserId, 1 AS SomeOtherId,
CAST('AAA' AS NVARCHAR(350)) AS Name,
-- etc etc etc..
/*
.... every thing in here is commented out
*/
GO
and then ...
- 将此存储过程添加到您的 EF 设计器/向导/等...现在正确的字段应该由设计器“确定”。惊人的。是的..这些值都是硬编码的..但是没关系(到目前为止)。
- 一旦您对 EF 现在已正确更新感到满意,请返回到您的存储过程,并删除所有硬编码的 SELECT(我们在上面的步骤中所做的)。现在我们删除注释掉整个真实代码。所以你应该找回原来的存储过程。
...现在 EF 已更新,并且不知道我们已经更改了存储过程的管道。
win :)
这对你有用吗?