четверг, 7 августа 2008 г.

Entity Framework - использование хранимых процедур

Предполагается, что большинство операций над данными в базе можно выполнить с использование LINQ. Но, конечно, это не всегда удобно и оптимально. Поэтому когда запрос более-менее сложен, я лично предпочитаю использовать хранимые процедуры. Остался лишь вопрос - как их дергать в коде?

Оказалось, очень просто. Ну, во-первых, надо создать саму процедуру. Во-вторых, надо обновить модель - т.е. в ModelBrowser щелкнуть правой кнопкой мыши на модели и выбрать Update Model From Database и там уже выбрать процедуру. После этого она добавляется в модель, но как-то не до конца - в коде она не появится до тех пор, пока вы ей не скажете. А для этого недо щелкнуть на процедуре (в модели) и выбрать Create Function Import. На экране появится окошко, в котором вас спросят, как назвать будущий метод, и что он будет возвращать. После этого можно обращаться к процедуре через контекст, причем обращение как к обычному методу, т.е.

context.Proc(parameters)

Один момент, который следует учесть. Если вы говорите, что процедура возвращает набор записей, которые могут быть приведены к какому-то классу, и если этот класс - полученный из других таблиц, но набор возвращаемых столбцов должен точно соответствовать набору столбцов (членов т.е.) для этого класса. Например, вы говорите, что будущий метод возвращает набор типа Client, а таблица Client в базе содержит три поля: Id, Name, Address. Так вот ваша процедура должна точно возвратить три этих столбца, а если она будет выбирать, например, только два из них, то будут выскакивать ошибки.