Temat: Zarządzanie bazą danych a kodowanie
Przemysław R.:
taki ORM może wygenerować potworka :)
http://srtsolutions.com/blogs/billwagner/archive/2006/...
Podajesz dość stare informacje, sprzed 3 lat zapewne z bety-wersji. Obecnie każdy może sobie sprawdzić samodzielnie, że tak jak cytujesz się nie dzieje:
using(var dc = new DataClasses1DataContext()) {
dc.Log = Console.Out;
var q = (
from p in dc.Products
orderby p.Size descending
select p)
.Skip(100)
.Take(20)
.OrderBy(p=>p.ProductNumber)
.Select(p=>p.Name)
.ToList();
}
i oto wyprodukowany SQL (dzięki dc.Log = Console.Out):
SELECT [t2].[Name]
FROM (
SELECT [t1].[Name], [t1].[ProductNumber], [t1].[ROW_NUMBER]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[Size] DESC) AS [ROW_NUMBER],
[t0].[Name], [t0].[ProductNumber]
FROM [SalesLT].[Product] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
) AS [t2]
ORDER BY [t2].[ProductNumber], [t2].[ROW_NUMBER]
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [100]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [20]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1
Input Int (Size = 0; Prec = 0; Scale = 0) [20]
Zwracam uwagę na różne warunki order by.
Od znawców tSQLa chętnie się dowiem, co jest nie tak w w/w kodzie, natomiast od architektów chętnie poznam inną metodę równie szybkiego generowania zapytań.
Jak pisałem polecam:
- korzystać z Linq2SQL bo oszczędza on czas czyli pieniądze czyli łatwiej jest oddać soft w terminie i budżecie
- zawsze kontrolować to co generuje (Linq2SQL, EF i inne) i w razie 'potworków' pokombinować. Ja potworków nie spotkałem ale spotkałem problemy z parametryzacją stałych wyrażeń, które jak widać tylko dla mnie wydają się problemem, wiec pisać nie będę.
Chętnie poznam, jeżeli ktoś miał jakieś negatywne doświadczenia z Linq2SQL wyciągnięte z projektu, z możliwością reprodukcji na dzisiejsze czasy.