gpt4 book ai didi

entity-framework - Entity Framework 4、复杂类型、StoredProcs 和临时表的问题

转载 作者:行者123 更新时间:2023-12-04 11:44:55 25 4
gpt4 key购买 nike

我在 Entity Framework 4 上跪了下来,但遇到了一个小问题。

我有一些存储过程可以放入我的 EDMX。当我从这些 procs 创建复杂类型时,EF 获取列信息没有问题。除了一处。困惑了一段时间后,我发现是我的临时表被填充导致了问题。实际上,它只是将 INSERT 调用到导致问题的临时表中。我实际上并没有用任何信息填充它。

虽然我知道我可以手动创建一个复杂类型,然后将函数映射到该类型,但我希望能够让 EF 为我处理它。有谁知道我做错了什么?

下面是一个不起作用的示例过程。在数据库中运行它并将 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

最佳答案

有几件事要尝试。

  • 使用 Variable Tables相反 -> 也许导入向导更喜欢那个?
  • 命名您的返回字段。

  • 尝试使用以下存储过程(未经测试......只是大声思考......)
    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 设计器/上下文等中根本不存在存储过程(您有一个干净的起点)
  • 打开您的存储过程和 /* /*在过程定义之后注释掉所有内容。

  • 例如..
    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

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

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

    赢 :)

    这对你有用吗?

    关于entity-framework - Entity Framework 4、复杂类型、StoredProcs 和临时表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3047751/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com