Entity Framework: Параметры функции отображения сложности - PullRequest
2 голосов
/ 14 сентября 2011

Я пытаюсь создать объект в моей модели, который имеет два свойства для указания его широты и долготы.В Sql Server 2008 R2 я использую один столбец в таблице для хранения этой информации.Столбец имеет тип география.Чтобы использовать объект в базе данных, я надеялся отобразить 3 хранимые процедуры для вставки, обновления и удаления строк из соответствующей таблицы в базе данных.Однако у меня возникли проблемы с получением сборки, содержащей мою модель, для компиляции без каких-либо ошибок.Я все еще довольно новичок в использовании EF 4, поэтому я не совсем уверен, как это сделать правильно.Мой частичный класс выглядит так:

public partial class MyEntity
{
    private double latitude;
    private double longitude;

    public double Latitude { get {return latitude;} set {latitude = value; }
    public double Longitude { get {return longitude;} set {longitude = value; }
}

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

Привязка функции отображения указывает функцию MyNamespace.Store.sp_insertMyEntity, но не отображает следующие параметры функции: Широта, Долгота.

Я должен как-то неправильно объявлять свойства.Возможно, это в моей модели.Любые предложения будут приветствоваться!

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Как я понимаю, ваша текущая сущность не отображает Latitude и Longitude.Это означает, что вы никогда не сможете загрузить их из базы данных и также не сможете сохранить их в базе данных - никоим образом.

Ваша хранимая процедура не может ожидать какого-либо параметра, который не поддерживается EF.Если ваша таблица базы данных использует тип данных Geography, вы также должны предоставить представление, которое разбито на отдельные столбцы Latitude и Longitude.Ваша сущность должна иметь Longitude и Latitude в качестве свойств и должна быть сопоставлена ​​с представлением.Ваши процедуры должны принимать сопоставленные Latitude и Longitude в качестве параметров.

Следующая основная версия EF должна поддерживать Geography напрямую.

2 голосов
/ 14 сентября 2011

Предполагая, что вы использовали ADO.NET Entity Data Model для сопоставления EF и вашей базы данных, самый простой способ сопоставления с SP - это использование мастера в обозревателе моделей.

  1. Браузер открытой модели
  2. Выберите узел Store
  3. Перейдите в раздел «Хранимые процедуры» и выберите хранимую процедуру, которую вы хотите сопоставить с
  4. Щелкните правой кнопкой мыши элемент и выберите «Импорт функции». Откроется диалоговое окно мастера.
  5. Нажмите кнопку Получить информацию о столбце
  6. Нажмите кнопку Создать сложный тип, это создаст тип на основе информации столбца
  7. В радиоуправлении выберите Сложный и свяжите новый сложный тип, который был создан
  8. Нажмите ОК

Это создаст новую функцию, которую вы можете использовать. Он будет обрабатывать связь с вашим SP, включая параметры, в то время как вы можете использовать его как обычную функцию.

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