Sto cercando di comprendere Entity Framework in particolare per capire se ha senso pensare di svilupparci sopra e farci affidamento (anche se adesso è ancora in Beta3) per una applicazione "corposetta".

Sto partendo dall'ABC, quindi siate pazienti. la prima cosa che ho fatto è stata mettere in piedi una VM con Windows Server 2008, Visual Studio 2008 e un piccolo Sql Express 2005; ho poi installato EF beta3 e un update per VS2008 che mi ha permesso di installare i tool, ancora in CTP, per manipolare EF direttamente da VS2008.

Mi sono quindi creato un bel progettino console e da bravo bimbo stavolta ho letto le istruzioni, non è vero... sono partito con un esempio semplice senza cioè cercare di fare i tripli carpiati subito.

Ho quindi aggiunto un bel "Modello" a cui ho fatto generare le entity sulla base della struttura del buon Northwind, si lo so non si fa, ma io devo imparare quindi va bene così.

Alla fine ho scritto questo:

        using( MyModel.ModelContainer container = new MyModel.ModelContainer() )
        {
            var q = from customer in container.Customers
                    where customer.Orders.Count > 10
                    select customer;

            foreach( var c in q )
            {
                Console.WriteLine( c.CompanyName );

                if( !c.Orders.IsLoaded )
                {
                    c.Orders.Load();
                }

                Console.WriteLine( "    Orders: {0}", c.Orders.Count );
            }

            Console.Read();
        }

Ok non male anche se la necessità di verificare che Orders sia Loaded mi fa veramente schifo inoltre mi preme far notare che l'SQL generato è tutto tranne "intelligente":

SELECT
[Project2].[CustomerID] AS [CustomerID],
[Project2].[CompanyName] AS [CompanyName],
[Project2].[ContactName] AS [ContactName],
[Project2].[ContactTitle] AS [ContactTitle],
[Project2].[Address] AS [Address],
[Project2].[City] AS [City],
[Project2].[Region] AS [Region],
[Project2].[PostalCode] AS [PostalCode],
[Project2].[Country] AS [Country],
[Project2].[Phone] AS [Phone],
[Project2].[Fax] AS [Fax]
FROM ( SELECT
    [Extent1].[CustomerID] AS [CustomerID],
    [Extent1].[CompanyName] AS [CompanyName],
    [Extent1].[ContactName] AS [ContactName],
    [Extent1].[ContactTitle] AS [ContactTitle],
    [Extent1].[Address] AS [Address],
    [Extent1].[City] AS [City],
    [Extent1].[Region] AS [Region],
    [Extent1].[PostalCode] AS [PostalCode],
    [Extent1].[Country] AS [Country],
    [Extent1].[Phone] AS [Phone],
    [Extent1].[Fax] AS [Fax],
    (SELECT
        COUNT([Project1].[C1]) AS [A1]
        FROM ( SELECT
            cast(1 as bit) AS [C1]
            FROM [dbo].[Orders] AS [Extent2]
            WHERE [Extent1].[CustomerID] = [Extent2].[CustomerID]
        )  AS [Project1]) AS [C1]
    FROM [dbo].[Customers] AS [Extent1]
)  AS [Project2]
WHERE [Project2].[C1] > 10

Staremo a vedere, nel frattempo proseguo, tempo tiranno permettendo, con gli esperimenti.

.m

Technorati tags: