Stored procedures 使用EF6从具有条件选择的存储过程捕获结果

Stored procedures 使用EF6从具有条件选择的存储过程捕获结果,stored-procedures,entity-framework-6,Stored Procedures,Entity Framework 6,我正在使用一个存储过程来调用EF6,其结果取决于满足的条件。如何在EF6中捕获这些结果 样本程序: 结果在任何情况下都是完全不同的,请在实体框架中指导捕获此类结果集!谢谢。这在很大程度上取决于您的型号。假设您有一个类别模型,并相应地映射了字段名,这样做将是一个开始: public Category GetCategoryById(int categoryId) { Category category; using (var context = new NorthwindData

我正在使用一个存储过程来调用
EF6
,其结果取决于满足的条件。如何在EF6中捕获这些结果

样本程序:
结果在任何情况下都是完全不同的,请在
实体框架
中指导捕获此类结果集!谢谢。

这在很大程度上取决于您的型号。假设您有一个类别模型,并相应地映射了字段名,这样做将是一个开始:

public Category GetCategoryById(int categoryId)
{
    Category category;

    using (var context = new NorthwindData())
    {
        SqlParameter categoryParam = new SqlParameter("@a", categoryId);
        category = context.Database.SqlQuery<Category>("udsp_get_category @a", categoryParam).FirstOrDefault();
    }

    return category;
}
public Category GetCategoryById(int categoryId)
{
类别;
使用(var context=new NorthwindData())
{
SqlParameter categoryParam=新的SqlParameter(“@a”,categoryId);
category=context.Database.SqlQuery(“udsp_get_category@a”,categoryParam).FirstOrDefault();
}
退货类别;
}

关于EF和存储过程的文章很多

只有在所有查询都具有相同形状的情况下,这才适用于EF。例如:

create procedure udsp_get_category
(
    @a int =0
)
as
if @a = 1
Begin
    select top 1 pk_cat_id as [Id],
                 cat_name as [Name],
                 cat_is_active as [Active],
                 1 as [IsMaster]
    from category_master
End
Else if @a = 0
Begin 
    select top 1 pk_cattp_id as [Id],
                 cattp_name as [Name],
                 cattp_is_active as [Active]
                 0 as [IsMaster]
    from category_type_master 
End
Else 
Begin
    select -1 as [Id],
           null as [Name],
           null as [Active]
           -1 as [IsMaster]
End
现在,您可以在具有
Id
Name
Active
IsMaster
作为属性的类中捕获结果

create procedure udsp_get_category
(
    @a int =0
)
as
if @a = 1
Begin
    select top 1 pk_cat_id as [Id],
                 cat_name as [Name],
                 cat_is_active as [Active],
                 1 as [IsMaster]
    from category_master
End
Else if @a = 0
Begin 
    select top 1 pk_cattp_id as [Id],
                 cattp_name as [Name],
                 cattp_is_active as [Active]
                 0 as [IsMaster]
    from category_type_master 
End
Else 
Begin
    select -1 as [Id],
           null as [Name],
           null as [Active]
           -1 as [IsMaster]
End