Rep*_*llr 7 entity-framework complextype
我在实体框架4上剥了皮,遇到了一个小问题.
我有一些存储过程,我正在拉入我的EDMX.当我从这些过程创建复杂类型时,EF获取列信息没有问题.除了在一个地方.在困惑了一段时间后,我发现这是我的临时表填充,导致问题.实际上它只是将INSERT调用到导致问题的临时表中.我实际上并没有填充任何信息.
虽然我知道我可以手动创建复杂类型然后将函数映射到该类型,但我希望能够让EF为我处理它.有谁知道我做错了什么?
下面是一个不起作用的示例过程.在DB中运行它并将proc添加到EDMX.然后尝试在"添加功能导入"屏幕中获取列信息.什么都没有归还.将INSERT注释到临时表并获取列信息并且它可以正常工作.
谢谢,史蒂夫
CREATE PROCEDURE dbo.TestProc
AS
SET NOCOUNT ON
CREATE TABLE #TempTable(
StartDate datetime
)
INSERT INTO #TempTable
SELECT null
DROP TABLE #TempTable
SELECT 1 AS ReturnValue
SET NOCOUNT OFF
GO
Run Code Online (Sandbox Code Playgroud)
一些事情要尝试.
尝试使用以下存储过程(未经测试...只是大声思考...)
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
Run Code Online (Sandbox Code Playgroud)
试试看,现在看看向导是否刷新.
-
好的..当EF设计师/向导/任何无法确切知道我的存储过程假设要返回的内容时,我通常会执行以下操作: -
/* /*
注释掉一切过程定义之后.例如..
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
Run Code Online (Sandbox Code Playgroud)
现在...... 3.在存储过程中添加强制虚假返回,其中(或多或少)仅定义输出结构/字段.
例如..
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
Run Code Online (Sandbox Code Playgroud)
然后 ......
...现在EF已更新,并且不知道我们已经更改了存储过程的管道.
赢:)
这对你有用吗?