Пользовательские функции SQL и Code First (EF 4.1) - PullRequest
8 голосов
/ 03 апреля 2011

Я использую Entity Framework 4.1 RC и код первый подход. Как я могу вызывать пользовательские функции SQL?

Если я использую атрибут EdmFunction , какое пространство имен мне следует указать?

[EdmFunction("Namespace", "GetAge")] 
public static int GetAge(Person p) 
{  
    throw new NotSupportedException(…); 
}

Когда я пытаюсьдля выполнения запроса LINQ с такой функцией выдается следующее исключение:

Указанный метод '...' для типа '...' не может быть преобразован в выражение хранилища LINQ to Entities.

Ответы [ 3 ]

8 голосов
/ 03 апреля 2011

Если вы хотите вызвать функцию SQL, вы должны выполнить собственный запрос SQL. Для этого используйте context.Database.SqlQuery. Entity Framework поддерживает отображение хранимых процедур, но эта функция не поддерживается в API DbContext (EF 4.1). Если вы хотите вызвать хранимую процедуру, вы должны снова использовать context.Database.SqlQuery. Хранимые процедуры никогда не могут использоваться в запросах Linq.

EdmFunction является функцией ObjectContext API и Entity Designer. Пространство имен установлено на пространство имен, определенное в файле EDMX. При использовании code-first у вас нет файла EDMX, и вы не можете определить отображение функций.

Btw. если вы следуете подходу, основанному на коде, у вас не должно быть хранимых процедур или функций SQL, потому что ваша база данных определяется вашей моделью (кодом) и генерируется структурой сущностей.

3 голосов
/ 11 июня 2014

Начиная с EF 6.1, теперь можно отображать функции, потому что теперь есть возможность доступа к EDM из Code First.

Вот пример реализации, которая позволяет отображать TVF и хранимые процедуры, но с некоторыми ограничениями. Он также использует пользовательские соглашения EF 6.

Надеюсь, скоро появятся более полные решения:

https://codefirstfunctions.codeplex.com/

ПРИМЕЧАНИЕ: вы можете использовать git, чтобы скопировать код на ваш компьютер и изменить / улучшить его

1 голос
/ 26 июня 2015

Я успешно вижу этот проект https://github.com/divega/UdfCodeFirstSample

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...