我正在尝试解决在UDF执行上映射原始实体的问题。 我有这种情况:
CREATE FUNCTION [dbo].[GetUsers]
(
@password nvarchar(50) NULL
)
RETURNS TABLE
AS
RETURN
(
SELECT UserID, Username FROM User
)
假设表用户只有那两列(int和nvarchar)。由于显而易见的原因,我跳过了这个过程中的任何逻辑。它现在只返回表User的所有行和列。
我已将表User映射为实体User,可从dbcontext访问。现在我希望它从IQueryable这个过程返回。我特别不想使用" Complex"的结果集。输入,但输入原始实体用户。
当我执行函数import并设置"返回"的集合时实体 - 用户,它不工作,抛出异常。
它在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);
}
所以当我使用:
调用函数时 var result = dbcontext.GetUsers("pass");
它抛出异常:&#39; Entities.GetUsers&#39;无法解析为有效的类型或函数。近成员访问表达式,第1行,第11列。
&#34;实体&#34;确实是我的dbcontext类的正确名称。
我的功能是否有问题或者可以采取哪些措施使这种情况有效?
非常感谢
答案 0 :(得分:0)
唯一的问题在于实体框架的错误,它显然不能使用不同的名称/类型的连接字符串而不是“实体”(它是ADO.NET模型创建的默认框架)。很久以前我修改了T4模板。直到我想打电话给UDF,我从来没有遇到任何问题。它使用了不同的名称和类型的连接字符串,我在多个库中共享它们并不是所有它都支持奇怪类型的连接字符串,如下所示:
的connectionString = “元数据= RES:// /DataModel.csdl|res:// /DataModel.ssdl | RES:// * / ...” 之一。
public partial class Entities : DbContext
{
public Entities() : base("name=Entities")
{
}
...
}
当我像上面那样回来时,它开始工作了。