gpt4 book ai didi

c# - 从 C# 调用标量函数

转载 作者:行者123 更新时间:2023-11-30 18:16:37 25 4
gpt4 key购买 nike

我在 sql 数据库中有一个标量函数,我想使用 linq to Entity context 调用它。

尽管我知道,您可以使用以下语法调用表函数。

    [DbFunction("Context", "TableFunc")]
public virtual IQueryable<ModelEntity> TableFunc(int
Id)
{
var IdParam = new ObjectParameter("Id", typeof(int))
{
Value = Id
};
return (this as IObjectContextAdapter).ObjectContext
.CreateQuery<ModelEntity>(
"Context.TableFunc(@Id)",IdParam);
}

但是如果我在这个地方使用标量函数。

我收到错误消息“未指定名称参数”

我的标量函数没有任何参数。

更新:标量函数调用

   [DbFunction("Context","GetValue")]
public virtual IQueryable<short> GetValue()
{
return (this as
IObjectContextAdapter).ObjectContext.CreateQuery<short>
("Context.GetValue()");
}

最佳答案

我最近通过查看 GitHub SourceCode 找到了解决方案还有这个 link .幸运的是,该方法非常简单,只是没有以易于阅读的方式编码,因此,我发现我很难正确使用它。

public partial class MainDbContext : DbContext
{
//....
[DbFunction("CodeFirstDatabaseSchema", "IsAssignedIncludedInPickedRoles")]
public static bool IsAssignedIncludedInPickedRoles(string pickedRoles, string assignedRoles)
{
throw new NotSupportedException();
}

//.....
}

歧义出现在使用“CodeFirstDatabaseSchema”字符串本身的义务中,尽管它是文档的一部分,引导您使用 dbContext 名称或 namespace ,包括您的 dbContext,但这些都不是第二件事是你不必在函数内部编写代码,你只需要在种子方法中通过 SqlCommand 创建 SQL 函数,然后享受你的工作

 var rslt = await ctx.AssignedInstitutions.Where(e => MainDbContext.IsAssignedIncludedInPickedRoles(e.Roles, "ARIOB")).ToListAsync();

关于c# - 从 C# 调用标量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46093950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com