#c# #entity-framework
#c# #entity-framework
Вопрос:
Я использую entity Framework, однако отключил генерацию кода и использую свои собственные классы poco (как подробно описано здесь http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx). До сих пор это было нормально, добавляя сущности, чтобы предоставлять кучу таблиц для запросов, однако пришло время, когда я хочу предоставить хранимую процедуру. Это не так просто — как мне написать создать сложный тип самостоятельно, а затем подключить его к модели сущности?
Я импортирую функциональную ссылку в edmx, я могу установить сложный возвращаемый тип и даже нажать «сгенерировать», но это непригодно, потому что я не использую автоматическую генерацию кода. Поэтому мне нужно иметь возможность создавать свои собственные, которые затем появятся в этом списке, чтобы я мог выбрать, а затем иметь возможность создать соответствующую запись в моем классе контекста сущности. Единственная информация в Интернете, похоже, генерирует сложные классы через визуальный интерфейс. Я неохотно редактирую файл edmx вручную, поскольку он будет удален только в том случае, если он будет сгенерирован повторно.
Я до сих пор пытался;
- Добавление функции в мой класс контекста без помещения ее в edmx; это, очевидно, привело к недопустимому исключению операции «Не удалось найти FunctionImport ‘GetT4OpenCases’ в контейнере’EclipseEntities'».
- Добавление функции в edmx и установка возвращаемого типа на none, затем добавление моей функции в контекст с помощью моего сложного типа, закодированного вручную, где я вижу другое недопустимое исключение operatino «Хранимая процедура или функция ‘GetT4OpenCases’ не имеет возвращаемого типа. ExecuteFunction поддерживает только хранимые процедуры и функции, которые имеют возвращаемый тип. «
Я в недоумении!
Спасибо.
Комментарии:
1. У меня есть далеко не идеальная работа, где у меня просто есть отдельный контекст, в котором хранятся сохраненные процедуры, которые имеют автоматическую генерацию кода, но это полный взлом; Я с нетерпением жду, знает ли кто-нибудь, как это сделать правильно…
2. Хорошо — оказывается, что обходной путь не работает — по какой-то причине наличие другого контекста нарушает мой исходный контекст, заставляя его постоянно жаловаться на отсутствие метаданных!! Итак, теперь я полностью застрял..
Ответ №1:
Хорошо, оказывается, это довольно просто — в файле edmx
- Обновите модель данных, чтобы включить сохраненный процесс, который я хочу
- Создайте функциональный импорт
- Во всплывающем окне выберите Создать сложный тип
- Создайте новый класс, который соответствует тому же имени / имеет те же свойства, что и предлагаемый сложный тип
- Добавьте запись в свой класс контекста вручную, например;
общедоступный IEnumerable GetT4Brokers() { возвращает базу.ExecuteFunction(«GetT4Brokers»); }