[Databases] Домашно Entity Framework - 10 Задача


0

Задача 10:  Create a stored procedures in the Northwind database for finding the total incomes for given supplier name and period (start date, end date). Implement a C# method that calls the stored procedure and returns the retuned record set.

Добро утро :D, Колеги изникна ми проблем с тази задача.
Това ми е процедурата: http://pastebin.com/udN4Ea8y

А това ми е метода: http://pastebin.com/MfuUXvey

При GetTotalIncome(1996, 1998, "Exotic Liquids"); ми изкарва резултат -1, ако изпълня процедурата през MS STUDIO ми изкарва сумата 226298,50;

Гледах заявката, която EF праща към базата данни и чрез Profiler, като и там всичко е наред, копнах заявката, която праща и я изпълних в MS Management Studio и дава същия резултат 226298,50;

Идеи?
--------------------------------------------------------------------
EDIT: Оставям горното запитване, ако на някой му се случи същия проблем.
Новото решение: http://pastebin.com/xiHvJHnD  ("HQC" :D)




Отговори



2
Няма нужда да е sql команда. Можеш да заредиш процедурата в northwind.edmx и после да я използваш като нормален метод от контекст обекта.
За целта първо трябва да влезеш в .edmx файла. Дясно копче някъде около диаграмите и избираш update model from database. Това е същото меню както при създаването и сега добавяш просто новите промени - транзакцията, която си написал. После пак дясно копче в полето с диаграмите и Add New -> Function Import. Избираш име, процедура, скаларна величина(или друго) и цъкаш ок и запазваш .edmx файла. Сега би трябвало през контекст обекта да можеш да виждаш процедурата.

от georgi.ivanov (3261 точки)


0
Мда ,така направих :)

от plamen.yovchev (3283 точки)

0
В процедурата датите ти също могат да бъдат от тип smalldatetime. Когато викаш от кода, просто минаваш стринга с датата през datetime.parse(" ").

от georgi.ivanov (3261 точки)



0
Опитай да подадеш параметрите директно в заявката, възможно е нещо да се прецаква в map-ването на типовете.

от staafl (5770 точки)


0
Хвърля ми Exception: Must declare scalar variable @startYear;

от plamen.yovchev (3283 точки)

0
имам предвид
var income = db.Database.ExecuteSqlCommand( "usp_FindTotalIncome @startYear, @endYear, @companyName" .Replace("@startYear", startYear+"") .Replace("@endYear", endYear+"") .Replace("@companyName", companYName));

от staafl (5770 точки)


2

Моето решение на задачата - тук

Подавам native sql заявка на контекста, която да създаде сторната процедура, приемаща три параметъра - име на компанията, начална и крайна дата, които да формират периода, в който да се търси сборът от приходи по доставчик.

После процедурата трябва да бъде добавена в контектста по начина, описан от колегата Георги.Иванов по-горе. 

Контекстът вече има метод, който извиква сторнатата процедура върху sql базата и връща резултата.


от SStoyanov1 (1324 точки)