Использование SqlFunctions или эквивалентной коллекции EdmFunctions с MySql и Entity Framework

Я использую Linq to Entities, поддерживаемый MySql. Я хотел бы иметь возможность использовать различные встроенные функции MySql, такие как rand . Если бы я использовал MS SQL Server, я мог бы использовать класс SqlFunctions, но это не работает с MySql; Я получаю сообщение об ошибке:

Rand () для типа «System.Data.Objects.SqlClient.SqlFunctions» не может быть переведено в выражение хранилища LINQ to Entities.

Я выяснил, как создать пользовательскую функцию в моей базе данных, которая обертывает встроенный RAND:

CREATE FUNCTION Random ()
RETURNS real NOT DETERMINISTIC
RETURN RAND();

Затем я обновляю свою модель из базы данных (я использую .ebmx) и создаю статический класс вроде этого:

public static class MyUserFunctions {
    [EdmFunction("MyModelNamespace.Store", "Random")]
    public static double Random() {
        throw new ArgumentNullException();
    }
}

И это позволяет мне вызывать MyUserFunctions.Random в предложении .Where над моим классом Entities:

using (MyEntities entities = new MyEntities()) {
    // Yes, I know ORDER BY RAND() is slow
    return entities.products.OrderBy(prod => MyUserFunctions.Random()).Take(4);
}

Итак, вопрос в том, могу ли я сделать это, не создавая глупую оболочку UDF, и просто сделать все встроенные функции MySql доступны более напрямую (возможно, путем установки свойства Namespace ] EdmFunction ) (в случае SqlFunctions пространство имен - "SqlServer ").

6
задан Perception 26 February 2013 в 18:43
поделиться