2015-03-12 9 views
11

Próbuję zwrócić listę int z procedury składowanej w Entity Framework.Podsumowanie listy obiektów z procedury składowanej

Utworzyłem procedurę przechowywaną dobrze i dodałem ją do Entity Framework. Próbuję powiązać go z typem złożonym, ale po otwarciu funkcji importuję.

To auto generuje typ złożony, który zwraca tylko int zamiast zestawu wyników.

Czy ktoś wie, w jaki sposób mogę zaimportować obiekt, który zwraca listę jako zestaw wyników?

+2

Pokaż nam jakiś kod, który już masz tak możemy pomóc. – DavidG

+0

To naprawdę nie jest związane z kodem. Mogę dodać pustą klasę z listą intów, ale jest to GUI Related, nie używam kodu jako pierwszego, więc powinno to być przez cały GUI. –

+0

Mam procedurę przechowywania, która po prostu wybiera listę identyfikatorów, które chcę pobrać w C# –

Odpowiedz

11

Stworzyłem tę przykładową procedurę przechowywaną przekazujących listę wartości int:

CREATE PROCEDURE dbo.GetListOfInt 
AS BEGIN 
    SELECT * 
    FROM 
    (VALUES (42), (4711), (8088), (80286), (80486), (655235)) AS VT(VC) 
END 

I wtedy dodano tę procedurę przechowywaną do mojego modelu EF .edmx i utworzono tę funkcję Import:

enter image description here

Zapytania procedury przechowywanej pokazuje mi, że zwraca zestaw wyników składają int wartości - I dlatego definiuje wartości zwracanej być zbiór skalarnych: Int32 w oknie importu funkcja.

Po tym, że mogę zadzwonić do procedury przechowywanej i wrócić wyniki jak poniżej:

using (testEntities ctx = new testEntities()) 
{ 
    ObjectResult<int?> result = ctx.GetListOfInt(); 

    foreach (int intValue in result.AsEnumerable()) 
    { 
     Console.WriteLine("INT value returned: {0}", intValue); 
    } 
} 
+1

Jeśli nadal jesteś w pobliżu, wiesz dlaczego, początkowo zwraca on wartość zerową zestaw wyników, gdy w kroku drugim widać, że zerowalny jest fałszywy –

+1

@Space: Zastanawiam się, że sam - nie jestem pewien, przepraszam.Przypuszczam, że EF po prostu nie może być * pewny *, że zwracany jest co najmniej jeden wiersz - procedura przechowywana (gdyby była nieco bardziej realistyczna) może również po prostu nie zwracać niczego (jeśli nie ma pasujących wierszy w tabeli dla "WHERE" kryteria dostarczone) –

+0

To ma sens, znowu dzięki za twoją ekspertyzę –

13

Jeśli tylko chcesz uzyskać listę z procedury składowanej, nie musisz mapować niczego specjalnego.

Wystarczy zadzwonić to tak:

var results = dbContext.Database.SqlQuery<int>("SP_YourSP").ToList(); 

ten powinien zwrócić listę wskazówki

+1

Spróbuję to –

+1

To działało dla mnie. Jest to wyjątek od mapowania obiektów, ale wykonuje pracę bez dodatkowego bólu głowy. – 1c1cle

+0

@AntoinePelletier Co MVC i WebForms mają wspólnego z technologią używaną do uzyskania dostępu do bazy danych? –

Powiązane problemy