EF6 CodeFirst(moozyk)的自定义DbFunction

时间:2018-10-08 09:51:51

标签: c# linq lambda ef-code-first dbfunctions

我想在linq lamda表达式中调用数据库标量值函数,DB函数的结果只是一个字符串值(NVARCHAR)。我使用moozzyk/CodeFirstFunctions在数据库上下文初始化程序中执行以下操作

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Add(new FunctionsConvention<SOWealthDB>("dbo"));
}

public MyDB(string connectionName = "MyDB") : (connectionName)
{
    [DbFunction("MyDB", "fnGetDescByDataLang")]
    public ObjectResult<string> fnGetDescByDataLang(short langId, string desc1, string desc2, string desc3, string desc4)
    {
        var op1 = new ObjectParameter("DataLangId", langId);
        var op2 = new ObjectParameter("Desc1", desc1);
        var op3 = new ObjectParameter("Desc2", desc2);
        var op4 = new ObjectParameter("Desc3", desc3);
        var op5 = new ObjectParameter("Desc4", desc4);

        var parameters = new ObjectParameter[] { op1, op2, op3, op4, op5 };
        var rs = ((IObjectContextAdapter)this).ObjectContext
            .ExecuteFunction<string>("fnGetDescByDataLang", parameters);
    }
}

当我调用函数时,出现以下异常:

  

System.Data.Entity.Core.EntityCommandExecutionException:“商店数据提供者返回的数据读取器没有足够的列用于请求的查询。”

P.S .:调用表值函数没有问题

0 个答案:

没有答案