实体框架4,复杂类型,StoredProcs和临时表的问题

complextype entity-framework

我在实体框架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

热门答案

一些事情要尝试。

  1. 使用变量表 - >也许导入向导更喜欢?
  2. 命名您的退货字段。

尝试使用以下存储过程(未经测试...只是大声思考...)

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设计师/向导/任何无法确切知道我的存储过程假设要返回的内容时,我通常会执行以下操作: -

  1. 确保EF设计器/上下文等中根本不存在存储过程。(您有一个干净的起点)
  2. 在过程定义之后打开存储过程和/* /*注释掉一切

例如..

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.在存储过程中添加强制虚假返回,其中(或多或少)仅定义输出结构/字段。

例如..

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

然后 ......

  1. 将此存储过程添加到EF设计器/向导/等等......现在,设计人员应“确定”正确的字段。真棒。是..这些值都是硬编码的......但是没关系(到目前为止)。
  2. 一旦您对EF现在正确更新感到高兴,请返回到您的存储过程,并删除所有硬编码的SELECT(我们在上面的步骤中做了)。现在我们删除注释掉整个实际代码的注释。所以你应该有你原来的存储过程。

...现在EF已更新,并且不知道我们已经更改了存储过程的管道。

赢:)

这对你有用吗?




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因