在Entity Framework中使用带有参数的存储过程

Ale*_*lex 3 c# sql-server wpf stored-procedures entity-framework

我正在使用Entity Framework 6.1.3并使用数据库优先方法让它生成模型文件和.EDMX.我还在SQL Server 2008 R2上有以下存储过程,Entity Framework将其引入EDMX:

CREATE PROCEDURE [dbo].[FindEmployee] 
    @LastName nvarchar(50), 
    @employeeID nvarchar(50),
    @securityID nvarchar(50)
AS
BEGIN
    SET NOCOUNT ON;

    select * 
    from Employee
    where 
        (lastName = dbo.trim(@LastName) AND dbo.trim(@LastName) IS NOT NULL)
        OR  (employeeID = dbo.trim(@employeeID) AND dbo.trim(@employeeID) IS NOT NULL)
        OR  (securityID = dbo.trim(@securityID) AND dbo.trim(@securityID) IS NOT NULL)
    order by
        case when dbo.trim(@LastName) is not null then CONVERT(char(50), lastName) + CONVERT(char(50), firstName) 
                when dbo.trim(@employeeID) is not null then employeeID 
                when dbo.trim(@securityID) is not null then securityID
            end
END
Run Code Online (Sandbox Code Playgroud)

在Windows WPF应用程序,我让用户选择列上(搜索lastName,employeeIDsecurityID从组合框).用户提供一个搜索值,该值将在对存储过程的调用中插入该参数.然后存储过程返回一个结果集SELECT,我将使用它来填充a DataGrid.

我正在尝试在此代码中调用存储过程; 请注意,它FindEmployee_Result是EDMX中用于存储过程的自动生成的类:

public FindEmployee_Result SearchEmployees(string lastName, string employeeID, string securityID)
{
    var results = new FindEmployee_Result();

    using (var ctx = new TestSelectionEntities())
    {
        results = ctx.FindEmployee(lastName,employeeID,securityID);
    }

    return results;
}
Run Code Online (Sandbox Code Playgroud)

这段代码爆炸了这个错误:

无法将类型'System.Data.Entity.Core.Objects.ObjectResult'隐式转换为'TestSelection.data.FindEmployee_Result'

我错过了什么?谢谢.

Ale*_*lex 5

解决方案是使用a List,因为存储过程返回FindEmployee_Result对象的结果集:

public List<FindEmployee_Result> SearchEmployees(string lastName, string employeeID, string securityID)
{
    using (var ctx = new TestSelectionEntities())
    {
        return ctx.FindEmployee(lastName,employeeID,securityID).ToList();
    }
}
Run Code Online (Sandbox Code Playgroud)