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);
}
}