TVF (функция значения таблицы) в структуре сущности с использованием кода

Кто-нибудь знает, можно ли использовать TVF в структуре сущности, используя сначала код? Конкретно:

Я знаю, что это не поддерживается для первого кода (и он не похож на EF6). С другой стороны, более поздние версии EF поддерживают TVF в первом сценарии базы данных (что для меня не является вариантом). Мне интересно, знает ли кто-нибудь, есть ли способ эмулировать, какую базу данных сначала делает, манипулируя моделью или чем-то подобным?

Еще одно уточнение; Я знаю, что его можно включить TVF, используя SQL, но мне также нужны TVF, которые могут быть составными (т.е. Быть частью оператора LINQ).

Ответ 1

Теперь это возможно. Я создал условное соглашение модели, которое позволяет использовать функции хранилища в CodeFirst в EF6.1. Соглашение доступно на NuGet http://www.nuget.org/packages/EntityFramework.CodeFirstStoreFunctions. Вот ссылка на блогпост, содержащий все подробности: http://blog.3d-logic.com/2014/04/09/support-for-store-functions-tvfs-and-stored-procs-in-entity-framework-6-1/

Ответ 2

В настоящее время возможно не. Он был отложен до EF6. Лучше всего проголосовать за это на своей панели голосовых сообщений. Предложение функции называется "" Первая поддержка кода для табличных функций". Я просто положил на это 3 голоса.

Ответ 3

Вы можете использовать Table-Valued Function в Entity Framework 5. Я думаю, что ссылка решит ваш вопрос:

Для использования функции значения таблицы в Entity Framework вам необходимо выполнить следующие шаги:

1. Щелкните правой кнопкой мыши имя проекта в обозревателе решений, выберите "Добавить", а затем "Создать"       Пункт.

2. Выберите данные из меню слева, а затем выберите модель данных сущности ADO.NET в       Панель шаблонов.

3. Введите TVFModel.edmx для имени файла и нажмите кнопку Добавить.

4. В диалоговом окне "Выбрать модель содержимого" выберите "Создать из базы данных", а затем       нажмите "Далее".

5. Нажмите "Новое соединение".       Введите (localdb)\v11.0 в текстовое поле Имя сервера       Введите "Школа" для имени базы данных       Нажмите "ОК".

6. В диалоговом окне "Выбрать ваши объекты базы данных" под таблицами node выберите       Person, StudentGrade и Course.

7. Выберите функцию GetStudentGradesForCourse, расположенную в Хранимой процедуре       и Функции node Обратите внимание, что начиная с Visual Studio 2012, Entity Designer
      позволяет вам импортировать сохраненные процедуры и функции.

8. Нажмите "Готово".

9. Дизайнер Entity, который предоставляет конструктивную поверхность для редактирования вашей модели, - это       отображается. Все объекты, выбранные вами в разделе "Выбор объектов базы данных"       диалоговое окно добавляется в модель.

10. По умолчанию форма результата каждой импортированной хранимой процедуры или функции будет отображаться       автоматически становятся новым сложным типом в вашей модели сущности. Но мы хотим отобразить       результаты функции GetStudentGradesForCourse для объекта StudentGrade:       Щелкните правой кнопкой мыши по поверхности дизайна и выберите "Браузер модели"       В браузере моделей выберите "Импорт объектов", а затем дважды щелкните значок       GetStudentGradesForCourse      В диалоговом окне "Редактировать функцию импорта" выберите "Объекты" и выберите "StudentGrade"

Вы можете использовать следующий код для использования Table-Value Function в приложении для извлечения данных:

using (var context = new SchoolEntities())
{
    var CourseID = 4022;
    var Grade = 3.5M;

    // Return all the best students in the Microeconomics class.
    var students = from s in context.GetStudentGradesForCourse(CourseID)
                            where s.Grade >= Grade
                            select new
                            {
                                s.Person,
                                s.Course.Title
                            };

    foreach (var result in students)
    {
        Console.WriteLine(
            "Couse: {0}, Student: {1} {2}",
            result.Title, 
            result.Person.FirstName, 
            result.Person.LastName);
    }
}