Ответ 1
Очень похоже на CreateQuery:
var id = 42;
using(var ctx = new Entities()){
var query = ctx.Companies.Where(o=>o.Id==id);
var result = query.First();
}
Прежде чем я вызову First() - это просто запрос. В базу данных ничего не отправлено. Только когда запрашиваются данные, запрос будет выполнен и извлечены данные.
Письмо лямбда прост, но, допустим, вы можете принести в жертву то, что принесет другие выгоды. Если EDMX не знает о вашем сопоставлении данных, вы в основном можете использовать ExecuteStoreQuery. Ex. вы вручную создали сопоставление.
var queryString = "SELECT ... FROM " + tableName;
var table = context.ExecuteStoreQuery<ResultTableTemplate>(queryString );
Написание кода для вашего приложения в порядке, но иногда база данных переживает несколько пользовательских интерфейсов. Чтобы минимизировать объем требуемой работы, вы можете сохранить некоторые, если не все функциональные возможности в базе данных. Их можно хранить там главным образом в виде функций или процедур.
ExecuteFunction предназначен только для импорта функций. Функции являются вычисленными значениями и не могут выполнять постоянные экологические изменения для SQL Server (т.е. Не разрешены инструкции INSERT или UPDATE). Чтобы вызвать пользовательскую функцию Select Today()
в С#:
var date = ctx.ExecuteFunction<DateTime>("Today").First();
Entity Framework поддерживает три способа загрузки связанных данных - загружаемая загрузка, ленивая загрузка и явная загрузка. По умолчанию это ленивая загрузка, поэтому вы видите, что я использую .First()/. FirstOrDefault/.ToList/... для получения дополнительной информации о том, как загружать данные по мере необходимости, вы можете взять посмотрите Загрузка связанных объектов.
Процедуры похожи на сценарии пакетной обработки базы данных. Если вы используете базовый проект базы данных, то, скорее всего, большая часть вашей бизнес-логики будет храниться в процедурах. Вы бы назвали их в С#, например:
var cmdText = "[DoStuff] @Name = @name_param, @Age = @age_param";
var @params = new[]{
new SqlParameter("name_param", "Josh"),
new SqlParameter("age_param", 45)
};
ObjectContext.ExecuteStoreQuery<MyObject>(cmdText, @params);
Бонус:
Одна общая вещь, которую вы хотели бы сделать, - вызвать хранимую процедуру, которая принимает параметр значения таблицы.