相关疑难解决方法(0)

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
Run Code Online (Sandbox Code Playgroud)

sql-server temp-tables entity-framework-4

60
推荐指数
3
解决办法
4万
查看次数

为什么在使用Entity Framework时我们必须在存储过程中写SET FMTONLY OFF

我最近加入了我团队的一个项目.他们使用ASP.NET MVC和MS SQL以及Entity Framework作为ORM.

我注意到EF中使用的每个存储过程在存储过程定义开始时都有这个公共行

IF(0=1) SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)

我认为这是一个非常奇怪的情况,所以我搜索了一下它并且还向我的同事询问了它.他们说,当EF映射存储过程时,它将所有参数发送为null并跳过所有if循环.因此,它也会跳过这个IF(0=1)条件 SET FMTONLY OFF

关于搜索SET FMTONLY OFFMSDN,说

仅返回客户端的元数据.可用于测试响应的格式,而无需实际运行查询.

当你不控制数据库时,它会成为一个问题,你必须不断告诉DBA添加它并一遍又一遍地向它们解释为什么首先需要它.

我仍然不清楚为什么这是必需的.如果有人能够详细解释这一点,或者引导我到一些链接,这个主题涵盖了对我来说意味着世界.

sql-server entity-framework

7
推荐指数
3
解决办法
2万
查看次数