C# 如何将用户定义的表值函数映射到EF 6数据库的第一个实体集合?

C# 如何将用户定义的表值函数映射到EF 6数据库的第一个实体集合?,c#,sql-server,entity-framework,entity-framework-6,user-defined-functions,C#,Sql Server,Entity Framework,Entity Framework 6,User Defined Functions,我试图解决在UDF执行时映射原始实体的问题。 我有这样一个场景: CREATE FUNCTION [dbo].[GetUsers] ( @password nvarchar(50) NULL ) RETURNS TABLE AS RETURN ( SELECT UserID, Username FROM User ) 假设表用户只有这两列(int和nvarchar)。它现在只返回表User中的所有行和

我试图解决在UDF执行时映射原始实体的问题。 我有这样一个场景:

    CREATE FUNCTION [dbo].[GetUsers]
    (
        @password nvarchar(50) NULL
    )
    RETURNS TABLE 
    AS
    RETURN 
    (
     SELECT UserID, Username FROM User
    )
假设表用户只有这两列(int和nvarchar)。它现在只返回表User中的所有行和列

我已经将表用户映射为实体用户,并且可以从dbcontext访问。现在我想让它作为IQueryable从这个过程返回。我特别不想使用“复杂”类型的结果集,而是使用原始实体用户

当我执行函数import并将“Returns collection of”设置为entities-User时,它不工作,抛出一个异常

它在dbcontext类中生成的代码如下所示:

    [DbFunction("Entities", "GetUsers")]
    public virtual IQueryable<User> GetUsers(string password)
    {
        var passwordParameter = password != null ?
            new ObjectParameter("password", password) :
            new ObjectParameter("password", typeof(string));

        return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<User>("[Entities].[GetUsers](@password)", passwordParameter);
    }
它引发异常:“Entities.GetUsers”无法解析为有效的类型或函数。靠近成员访问表达式,第1行,第11列。

“Entities”确实是dbcontext类的正确名称

我的功能是否有误,或者可以采取哪些措施来实现此场景


非常感谢

唯一的问题在于实体框架的缺陷,它显然无法使用与“实体”(ADO.NET模型创建的默认名称/类型)不同的连接字符串。我很久以前就修改了T4模板。直到我想打电话给UDF的那个一刻,我还从来并没有遇到过任何问题。它使用了不同的名称和类型的连接字符串,我在多个库中共享这些名称和类型的连接字符串,但并不是所有库都支持这种奇怪类型的连接字符串:

connectionString=“元数据=res:///DataModel.csdl|res:///DataModel.ssdl|res://*/…” 一个


当我像上面那样把它放回去时,它开始工作。

稍微绕道,但这是一个非常重要的问题。您似乎正在以纯文本形式存储密码。这是一个非常糟糕的主意。你需要加密和散列密码来保护你的用户数据。别担心,我不是,为什么你认为我希望这个功能工作:)
   var result = dbcontext.GetUsers("pass");
public partial class Entities : DbContext
{
    public Entities() : base("name=Entities")
    {
    }

    ...
}