Учитывая, что EF не полностью поддерживает пространственные типы данных SQL, я надеялся пока обойти это.
Хотя сначала я работаю с кодом, у меня есть хранимая процедура, использующая формулы диапазона пространственных данных sql2008 r2. Моей целью было вернуть расстояние от каждого объекта до запрашиваемого местоположения.
С некоторой помощью из приведенных ниже ответов я изменил свой код на следующий
У меня есть простой класс 'Вакансия'
public class Vacancy
{
public int Id { get; set; }
public string Title { get; set; }
}
public class VacancyWithRange : Vacancy
{
public int Calculated { get; set; }
}
Затем я запрашиваю контекст напрямую таким способом
public List<Vacancy> Get()
{
Context db = new Context();
var context = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)(db)).ObjectContext;
db.Database.Connection.Open();
DbCommand cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "select *, [Calculated distance from query to vacancy object] as Calculated from Vacancies";
cmd.CommandType = System.Data.CommandType.Text;
var result = context.Translate<VacancyWithRange>(cmd.ExecuteReader()).ToList();
foreach (VacancyWithRange v in result)
{
db.Vacancies.Attach(v);
}
return result;
}
Цикл foreach в конце метода Get () успешно присоединяет VacancyWithRange к вакансиям, поэтому у меня есть доступ к связанным объектам с помощью отложенной загрузки.
Насколько я могу судить, на данный момент это жизнеспособное решение для получения "пользовательских" рассчитанных данных из базы данных с кодом вначале.
Спасибо за чтение.