小编Gol*_*lda的帖子

EF:将表值参数从 C# 传递给用户定义的函数

我在 SQL Server 中有一个用户定义的函数,它接受 TVP(表值参数)作为参数。在 EF 中,如何从 C# 调用这样的函数?

我尝试使用该方法,ObjectContext.CreateQuery<>但出现以下错误:

函数“QueryByParam”的参数“param”无效。参数只能是可以转换为 Edm 标量类型的类型。

也尝试过方法ObjectContext.ExecuteStoreQuery<>并得到相同的错误。IQueryable无论如何它都不会返回。

示例代码

[DbFunction(nameof(SampleDbContext), "QueryByParam")]
public IQueryable<SecurityQueryRow> QueryByParam(IEnumerable<ProfileType> profiles, bool isActive = false)
{
    DataTable dataTable = ....
    ObjectParameter profilesParam = new ObjectParameter("profileTypeIds", dataTable);

    ObjectParameter isActiveParam = new ObjectParameter("isActive ", isActive);

    return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<SecurityQueryRow>(
            string.Format("[{0}].[{1}](@profileTypeIds, @isActive)", GetType().Name, "QueryByParam"),
            profilesParam,
            isActiveParam);
}
Run Code Online (Sandbox Code Playgroud)

要求是我们需要一个 IQueryable 返回,而不是消耗的结果。

c# sql-server entity-framework table-valued-parameters entity-framework-6

10
推荐指数
1
解决办法
1081
查看次数