Una torna a casa per qualche giorno di ferie e si becca il maltempo. Qualcuno crede alla sfortuna, altri al destino... non me ne importa niente: il problema è che c'è brutto tempo!
Allora per ammazzare un po' il tempo prima di pranzo cosa c'è di meglio che giocare con leggerezza ancora con l'Entity Framework?
Dopo che nel post precedente ho fatto vedere un banale inserimento, ecco come visualizzare i dati inseriti:
using (TestEntitiesModel.TestEntitiesCode context = new TestEntitiesModel.TestEntitiesCode())
{
var coll = from t in context.Names.Include("Books")
select t;
gw1.DataSource = coll;
gw1.DataBind();
}
Sempre con la sintassi Linq, faccio una select del contenuto della Entity Names e con l'include, voglio anche che sia popolata la collection dei Books. Il GridView nel codice html è il seguente:
<asp:GridView ID="gw1" EnableViewState="false" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" />
<asp:BoundField DataField="Names1" />
<asp:TemplateField>
<ItemTemplate>
<asp:GridView ID="gw_book" runat="server" DataSource='<%# Eval("Books") %>'>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Il risultato è il seguente:
Ma la mia grande curiosità è che comando sql è stato inviato a Sql Server. Armato di Profiler vado a curiosare e scopro una query alquanto bizzarra, almeno per me:
SELECT
[Project2].[Id] AS [Id],
[Project2].[Names] AS [Names],
[Project2].[C1] AS [C1],
[Project2].[C2] AS [C2],
[Project2].[Id1] AS [Id1],
[Project2].[Title] AS [Title]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Names] AS [Names],
1 AS [C1],
[Project1].[Id] AS [Id1],
[Project1].[Title] AS [Title],
[Project1].[C1] AS [C2]
FROM [dbo].[Names] AS [Extent1]
LEFT OUTER JOIN (SELECT
[Extent2].[NamesId] AS [NamesId],
[Extent3].[Id] AS [Id],
[Extent3].[Title] AS [Title],
1 AS [C1]
FROM [dbo].[NamesBooks] AS [Extent2]
INNER JOIN [dbo].[Books] AS [Extent3] ON [Extent3].[Id] = [Extent2].[BooksId] ) AS [Project1] ON [Extent1].[Id] = [Project1].[NamesId]
) AS [Project2]
ORDER BY [Project2].[Id] ASC, [Project2].[C2] ASC
Ancora una volta avevo pensato male. Avevo immaginato che facesse una prima query e quindi n eventuali per la tebella figlia, e invece ha creato un unico comando con sotto query in modo molto furbo.
Il risultato della query lanciata così come appare è il seguente:
E' lui da codice poi a fare il distict per la collection Names e con le colonne virtuali create, C1 e C2 utilizzate in caso di più tabelle figlie.
Mi piace l'Entity Framework. Ne so ben poco, ma mi piace!
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- C# e Net 6 in Kubernetes con Prometheus e Grafana, il 12 gennaio 2022 alle 21:58
- Snaturare Kubernetes evitando i custom container Docker, il 6 gennaio 2022 alle 19:40
- Provando Kaniko in Kubernetes come alternativa a Docker per la creazione di immagini, il 18 dicembre 2021 alle 20:11
- Divertissement con l'OpenID e Access Token, il 6 dicembre 2021 alle 20:05
- Operator per Kubernetes in C# e Net Core 6., il 28 novembre 2021 alle 19:44
- RBAC in Kubernetes verso gli operator, il 21 novembre 2021 alle 20:52