Asp.net mvc 调用存储过程时使用.Include方法

Asp.net mvc 调用存储过程时使用.Include方法,asp.net-mvc,entity-framework,stored-procedures,Asp.net Mvc,Entity Framework,Stored Procedures,我有一个简单的控制器和视图,它接受用户输入字符串,过滤单个表,并显示结果 我正在使用存储过程对数据库进行搜索 public ActionResult Search(string searchString) { var DBdata = db.WUI_searchDatabases(null,null,searchString,null,null).ToList<Core_Databases>(); return View(DBdata); } 很好,但是我正在努力了

我有一个简单的控制器和视图,它接受用户输入字符串,过滤单个表,并显示结果

我正在使用存储过程对数据库进行搜索

public ActionResult Search(string searchString)
{
    var DBdata = db.WUI_searchDatabases(null,null,searchString,null,null).ToList<Core_Databases>();
    return View(DBdata);
}
很好,但是我正在努力了解如何使用存储过程来填充我的Core_数据库,而不是LINQ来完成同样的事情

任何提示或指针都很受欢迎-似乎正在与谷歌周旋

------------------------------------------------------------- 鉴于目前的反应,我似乎遇到了麻烦。 去邮政编码。 我的目标是筛选1个表,但能够显示所有3个相关表的结果记录

TBH我还不确定,我是否想在一个视图中显示,或者利用部分甚至视图组件。我只是在学习,并认为1视图将是目前最容易的!! 因此,在这一阶段,仅仅是一种“a”的方式将是一个开始

表:核心数据库

    public partial class Core_Databases
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Core_Databases()
    {
        this.Core_Schemas = new HashSet<Core_Schemas>();
    }

    [Key]
    [Column(Order = 0)]
    public int C_id { get; set; }
    public string C_linkedServerName { get; set; }
    public string C_dataServerName { get; set; }
    public string name { get; set; }
    public Nullable<int> database_id { get; set; }
// other ....

    public virtual Core_Servers Core_Servers { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Core_Schemas> Core_Schemas { get; set; }
}

你能展示你的SP和型号吗?我希望你不能,因为
.Include(…)
扩展方法会影响SQL查询以检索额外数据,这在你使用SP时是无法做到的。当然,除非你修改SP,这会使
.Include(…)
的使用过时,由于它已经在SP中硬编码。由于从存储过程调用中得到的不是
IQueryable
(一个“正在生成的查询”),而是一个已填充的数据列表,因此不能向该列表中添加
.Include()
语句。你必须在存储过程中处理这个问题,可能是通过在存储过程调用中指定一个参数,或者一些确保包含代码的东西——现在就在上面……好吧,所以我想关于EF是如何工作的,以及为什么存储过程+EF真的不能很好地凝胶的问题,答案已经在我的脑海中花了一分钱。我会开一会儿,以防有人突然回答。。。。但我认为答案是:这不可能!!
    public partial class Core_Databases
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Core_Databases()
    {
        this.Core_Schemas = new HashSet<Core_Schemas>();
    }

    [Key]
    [Column(Order = 0)]
    public int C_id { get; set; }
    public string C_linkedServerName { get; set; }
    public string C_dataServerName { get; set; }
    public string name { get; set; }
    public Nullable<int> database_id { get; set; }
// other ....

    public virtual Core_Servers Core_Servers { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Core_Schemas> Core_Schemas { get; set; }
}
public partial class Core_Schemas
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public Core_Schemas()
    {
        this.Core_Objects = new HashSet<Core_Objects>();
    }

    [Key]
    [Column(Order = 0)]
    public int C_databaseID { get; set; }
    [Key]
    [Column(Order = 1)]
    public int schema_id { get; set; }
    public string name { get; set; }
    public Nullable<int> principal_id { get; set; }

    public virtual Core_Databases Core_Databases { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<Core_Objects> Core_Objects { get; set; }
}
    public class Core_DatabasesController : Controller
{
    private GBSS_DST_1Entities1 db = new GBSS_DST_1Entities1();

    public ActionResult Search(string searchString)
    {
        var DBdata = db.WUI_searchDatabases(null,null,searchString,null,null).ToList<Core_Databases>();
        return View(DBdata);
    }
}
ALTER procedure [MD16].[WUI_searchDatabases](
    @id int = null
    ,@dataServerName nvarchar(128) = null
    ,@name nvarchar(128) = null
    ,@compatability_level tinyint = null
    ,@collation_name nvarchar(128) = null
)
AS
--SET FMTONLY OFF
set nocount on 

DECLARE
    @sql        nvarchar(MAX),                               
    @paramlist  nvarchar(4000)                        

-- Base Query
    SELECT @sql =  '' +
        'SELECT ' + 
            '[_id] as [C_id]
            ,[_linkedServerName] as [C_linkedServerName]
            ,[_dataServerName] as [C_dataServerName]
            ,[name],[database_id],[source_database_id],[owner_sid],[create_date],[compatibility_level],[collation_name],[user_access],[user_access_desc],[is_read_only],[is_auto_close_on],[is_auto_shrink_on],[state],[state_desc],[is_in_standby],[is_cleanly_shutdown],[is_supplemental_logging_enabled],[snapshot_isolation_state],[snapshot_isolation_state_desc],[is_read_committed_snapshot_on],[recovery_model],[recovery_model_desc],[page_verify_option],[page_verify_option_desc],[is_auto_create_stats_on],[is_auto_update_stats_on],[is_auto_update_stats_async_on],[is_ansi_null_default_on],[is_ansi_nulls_on],[is_ansi_padding_on],[is_ansi_warnings_on],[is_arithabort_on],[is_concat_null_yields_null_on],[is_numeric_roundabort_on],[is_quoted_identifier_on],[is_recursive_triggers_on],[is_cursor_close_on_commit_on],[is_local_cursor_default],[is_fulltext_enabled],[is_trustworthy_on],[is_db_chaining_on],[is_parameterization_forced],[is_master_key_encrypted_by_server],[is_published],[is_subscribed],[is_merge_published],[is_distributor],[is_sync_with_backup],[service_broker_guid],[is_broker_enabled],[log_reuse_wait],[log_reuse_wait_desc],[is_date_correlation_on],[is_cdc_enabled],[is_encrypted],[is_honor_broker_priority_on] ' + 
        'FROM MD16.Core_Databases WHERE 1=1 ' 

IF @id IS NOT NULL SELECT @sql += ' AND [_id] = @id';
IF @dataServername IS NOT NULL SELECT @sql += ' AND [_dataServerName] = @dataServerName';
IF @name IS NOT NULL SELECT @sql += ' AND [name] = @name' ;
IF @compatability_level IS NOT NULL SELECT @sql += ' AND [compatability_level] = @compatability_level';
IF @collation_name IS NOT NULL SELECT @sql += ' AND [collation_name] = @collation_name' ;

SELECT @paramlist = '@id     int,                         
                     @dataServerName    nvarchar(128),
                     @name nvarchar(128),
                     @compatability_level tinyint,
                     @collation_name nvarchar(128)'

EXEC sp_executesql @sql, @paramlist,
                    @id, @dataServername, @name, @compatability_level, @collation_name