EF4-所选的存储过程不返回任何列

我在存储过程中查询,该存储过程使用一些动态SQL调用了一些链接服务器。我知道EF不喜欢这样,所以我专门列出了将要返回的所有列。但是,它仍然不喜欢那样。我在这里做错了什么?我只希望EF能够检测从存储过程返回的列,以便创建所需的类。


请查看以下代码,这些代码构成了存储过程的最后几行:


SELECT

    #TempMain.ID,

    #TempMain.Class_Data,

    #TempMain.Web_Store_Class1,

    #TempMain.Web_Store_Class2,

    #TempMain.Web_Store_Status,

    #TempMain.Cur_1pc_Cat51_Price,

    #TempMain.Cur_1pc_Cat52_Price,

    #TempMain.Cur_1pc_Cat61_Price,

    #TempMain.Cur_1pc_Cat62_Price,

    #TempMain.Cur_1pc_Cat63_Price,

    #TempMain.Flat_Length,

    #TempMain.Flat_Width,

    #TempMain.Item_Height,

    #TempMain.Item_Weight,

    #TempMain.Um,

    #TempMain.Lead_Time_Code,

    #TempMain.Wp_Image_Nme,

    #TempMain.Wp_Mod_Dte,

    #TempMain.Catalog_Price_Chg_Dt,

    #TempMain.Description,

    #TempMain.Supersede_Ctl,

    #TempMain.Supersede_Pn,

    TempDesc.Cust_Desc,

    TempMfgr.Mfgr_Item_Nbr,

    TempMfgr.Mfgr_Name,

    TempMfgr.Vendor_ID

FROM

    #TempMain

        LEFT JOIN TempDesc ON #TempMain.ID = TempDesc.ID

        LEFT JOIN TempMfgr ON #TempMain.ID = TempMfgr.ID


海绵宝宝撒
浏览 545回答 3
3回答

偶然的你

EF不支持导入存储过程,这些存储过程从以下位置构建结果集:动态查询临时表原因是要导入过程EF必须执行它。这种操作可能很危险,因为它可能会触发数据库中的某些更改。因此,EF在执行存储过程之前会使用特殊的SQL命令:SET FMTONLY ON通过执行此命令,存储过程将仅返回有关其结果集中各列的“元数据”,并且将不执行其逻辑。但是因为未执行逻辑,所以没有临时表(或内置的动态查询),因此元数据不包含任何内容。您有两种选择(一种需要重写存储过程以不使用这些功能的选择除外):手动定义返回的复杂类型(我猜应该可以)使用技巧,仅用于添加开始时放置的存储过程SET FMTONLY OFF。这将允许您的SP的其余代码以正常方式执行。只需确保您的SP不会修改任何数据,因为这些修改将在导入期间执行!成功导入后,删除该hack。

慕工程0101907

或者,您可以创建一个用户定义的表类型并将其返回。CREATE TYPE T1 AS TABLE ( ID bigint NOT NULL  ,Field1 varchar(max) COLLATE Latin1_General_CI_AI NOT NULL  ,Field2 bit NOT NULL  ,Field3 varchar(500) NOT NULL  );GO然后在过程中:DECLARE @tempTable dbo.T1INSERT @tempTable (ID, Field1, Field2, Field3)SELECT .........SELECT * FROM @tempTable现在,EF应该能够识别返回的列类型。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server