代码之家  ›  专栏  ›  技术社区  ›  Antoine Pelletier

使用MVC上下文菜单和EF从存储过程生成列表视图

  •  0
  • Antoine Pelletier  · 技术社区  · 8 年前

    它以一个SQL Server存储过程开始,该存储过程如下所示:

    CREATE PROCEDURE [dbo].[ExtractionPourFicheSante]
        @AnBudg NVARCHAR(4),
        @Ecole NVARCHAR(3),
        @Fiche NVARCHAR(10),
        @grprep NVARCHAR(20),
        @classi NVARCHAR(20)
    AS
    BEGIN
        SET NOCOUNT ON;
    
        IF (ISNULL(NULLIF(LTRIM(RTRIM(@Fiche)), ''), 'NA') = 'NA')
            IF (ISNULL(NULLIF(LTRIM(RTRIM(@grprep)), ''), 'NA') = 'NA')
                IF (ISNULL(NULLIF(LTRIM(RTRIM(@classi)), ''), 'NA') = 'NA')
                    SELECT
                        ISNULL(z.FICHE, '123456789') AS TheKey,
                        z.*
                    FROM  
                        [gpi].dbo.GPM_E_ELE_Z_DOSSIER Z
                ELSE
                    /* similar query */
            ELSE
                /* similar query */
         ELSE
             /* similar query */
    END
    

    通过在EDMX文件中单击鼠标右键,使用自动映射器将存储过程引入。

    正在尝试创建 list 使用上下文MVC菜单 ExtractionPourFicheSante_Result 由于视图模型实际上返回了一个错误:

    好吧,作为主键的最佳人选是 TheKey 我确信这是独一无二的。用谷歌搜索等等。。。尚未找到有关在存储过程中定义主键的任何内容。也没有找到让英孚假装有一个。我可以像往常一样工作。但我受够了。。。

    这在当前版本的EF中是不可能的。奇怪的是,他们允许导入这样一个存储过程,但却不能使用它,因为select部分没有涉及主键。

    有干净的解决方案吗?有人经历过这个吗?非常感谢你的阅读。

    2 回复  |  直到 8 年前
        1
  •  0
  •   AnkitG    8 年前

    不确定,但尝试在select语句中使用行数

                    SELECT
                        ISNULL(z.FICHE, '123456789') AS TheKey,
                        z.*,
                        row_number() over (order by z.createddate desc) rowID 
                    FROM  
                        [gpi].dbo.GPM_E_ELE_Z_DOSSIER Z
    

    确保为进程生成了ComplexType和FunctionImport。 还要确保定期保存edmx文件。

        2
  •  0
  •   Antoine Pelletier    7 年前

    暂时

    //------------------------------------------------------------------------------
    // <auto-generated>
    //------------------------------------------------------------------------------
    
    using System.ComponentModel.DataAnnotations;               // THIS ONE
    
    namespace Rapport_CE_MVC.Models
    {
        using System;
    
        public partial class ExtractionPourFicheSante_Result
        {
            [Key]                                              // AND THIS ONE
            public string fonds { get; set; }
    
            /* all the rest of the properties */
        }
    }
    

    通过添加 [Key]

    正确设置这些选项将允许您使用使用MVC上下文菜单的视图创建器,就像使用普通表一样(它适用于 list ,不确定 edit 以及其他)。

    列表 类型)。