C# 读取存储过程返回的数据

C# 读取存储过程返回的数据,c#,entity-framework,entity-framework-4,C#,Entity Framework,Entity Framework 4,我有一个存储过程,它返回一个表(或数据集、视图或任何调用,它返回select的结果)。我使用实体框架,我希望它通过创建实体将存储的过程视为一个表。当我将proc添加到实体模式时,它会被添加,但不会生成任何类(模式或intellisense中不会显示任何内容) 我不想使用这个看起来丑陋且未经优化的数据集解决方案: SqlCommand sqlCommand = new SqlCommand("sp_ProjetsVoxco"); sqlCommand.CommandType = CommandTy

我有一个存储过程,它返回一个表(或数据集、视图或任何调用,它返回
select
的结果)。我使用实体框架,我希望它通过创建实体将存储的过程视为一个表。当我将proc添加到实体模式时,它会被添加,但不会生成任何类(模式或intellisense中不会显示任何内容)

我不想使用这个看起来丑陋且未经优化的数据集解决方案:

SqlCommand sqlCommand = new SqlCommand("sp_ProjetsVoxco");
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Connection = new SqlConnection(
    Settings.Default.ConnectionStringTransit);
SqlDataAdapter sa = new SqlDataAdapter(sqlCommand);
DataSet dataSet = new DataSet();
sa.Fill(dataSet);
我发现一句话似乎很简洁:

var x = context.ExecuteStoreQuery<T>("sp_ProjetsVoxco");
var x=context.ExecuteStoreQuery(“sp_ProjetsVoxco”);

但是由于实体框架没有生成类,我不确定如何处理
T

向模型中添加存储过程是不够的。您还必须添加。函数导入是存储过程到上下文中方法的映射(应该为您生成方法)。在此映射中,您可以将结果映射到现有实体、复杂类型或定义新的复杂类型


ExecuteStoreQuery
与导入的存储过程无关。用于直接执行SQL(=EF)和
T
必须是您的自定义类型,该类型具有与存储过程返回的结果集具有相同名称的公共可设置属性。

我假设您有
edmx
文件,并且您现在正试图添加已在数据库中创建的存储过程

1-您应该添加存储过程,通过使用从数据库更新模型选项添加存储过程,就像添加任何其他表一样,这将使EF了解SP。(因为我已经有了SP,我正在显示
刷新
选项卡,但是如果您尚未添加SP,您将在
添加
选项卡中看到SP)

2-导入函数

3-给它一个名称,并创建一个新的复杂类型

4-单击确定并使用新方法名称

public IEnumerable<mySPMethodCallName_Result> ListAllServiceLogsFromSP(decimal clientId)
{
    var r = from sp in db.sp_ListServiceLogsByClientId(clientId)
            select sp;

    return r;
}
public IEnumerable ListAllServicesLogsFromSP(十进制客户端ID)
{
var r=来自db.sp_ListServiceLogsByClientId(clientId)中的sp
选择sp;
返回r;
}

您是否尝试手动创建实体类(例如POCO)?您是否已经在数据库中创建了存储过程,还是尝试从代码中执行所有操作?我没有手动创建类。存储的进程已经在数据库中,工作正常。谢谢你们,你们让我开心。