LINQ2SQL - хранимая процедура не создает класс в конструкторе - PullRequest
1 голос
/ 16 июня 2011

Я в основном пытаюсь добавить набор хранимых процедур в мой LINQ2SQL через конструктор.

Он добавляет хранимые процедуры в панель методов, но не создает класс в конструкторе (хотяделает в коде конструктора позади.

Это дает типам возвращаемых данных странное имя на основе хранимой процедуры, и в основном я пытаюсь найти лучший способ изменить тип возвращаемого значения на что-то более значимое.

Я знаю, что могу создавать классы вручную в конструкторе, но у меня есть 5 очень больших классов, и я удивляюсь, есть ли способ создать их автоматически или просто правильно переименовать типы возвращаемых данных?

Я нашел этот вопрос, ноЯ думаю, что это включает в себя написание вашего класса вручную, а затем немного взломать, поэтому я не был уверен в этом:

LINQ to SQL - Невозможно изменить тип возвращаемого значения хранимой процедуры

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

См. этот пост Скотт Гатри.

Если вы прокрутите вниз до раздела «Сопоставление возвращаемого типа методов SPROC с классами модели данных», вы увидите, что если вы перетащите хранимую процедуру на определенный класс модели в конструкторе LINQ2SQL, она будетскажите разработчику, что вы хотите, чтобы хранимая процедура возвращала коллекцию этого типа модели.

Вы также можете посмотреть, как люди обрабатывают возвращение нескольких типов данных из хранимой процедуры в качестве метода решения вашей проблемы.

0 голосов
/ 17 июня 2011

Я не уверен насчет добавления класса в таблицу, но вот один из способов «переименования» возвращаемого типа sproc.

Следующие шаги предполагают наличие хранимой процедуры с именем «GetSomeThings» и dataContext с именем «DataContext».

Когда вы добавляете sproc в конструктор, переименовываете его в «GetSomeThingsPrivate». в файле designer.cs теперь будет определен класс с именем «GetSomeThingsPrivateResult».

Создайте новый класс под названием «Вещи». определите новый частичный класс следующим образом: public partial class GetSomeThingsPrivateResult : Thing {}

определить новый частичный класс следующим образом:

public partial class DataContext
{
    public IEnumerable<Thing> GetSomeThings()
    {
        return GetSomeThingsPrivate.Cast<Thing>();
    }
}

теперь вы можете вызвать метод GetSomeThings(), который вызовет хранимую процедуру "GetSomeThings", и в результате вы получите IEnumerable Thing вместо GetSomeThingsResult.

Обратите внимание, что созданный дизайнером метод возвращает ISingleResult, тогда как новый метод возвращает IEnumerable. Если вам нужна функциональность ISingleResult, вам нужно найти дополнительный обходной путь - я не тратил много времени, пытаясь заставить это работать.

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