Пользовательские DbFunctions для EF6 CodeFirst (moozyk) - PullRequest
0 голосов
/ 08 октября 2018

Я хочу вызвать скалярно-значную функцию базы данных в выражении 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);
    }
}

Когда я вызываю функцию, я получаю следующее исключение:

Система.Data.Entity.Core.EntityCommandExecutionException: 'В считывателе данных, возвращенном поставщиком данных хранилища, недостаточно столбцов для запрошенного запроса.'

PS: у меня нет проблем с вызовом табличных функций

...