Ich verwende Entity Framework von .NET 3.5
Ich habe zwei Tabellen mit 0-1 zu vielen Beziehungen. Sagen wir Bürger und Stadt. Jeder Bürger hat eine Fremdschlüsselspalte (ID), die ihn mit der Stadt verbindet.
Wenn ich einen Einzelbürger wähle, muss ich auch den Namen der Stadt auswählen, in der er lebt. Da die Stadttabelle Tonnen von Daten enthält, die nicht wirklich mit dem Bürger in Verbindung stehen, möchte ich sie nicht aus der Datenbank abrufen, um etwas Bandbreite zu sparen.
Zur Zeit verwende ich die Include () - Funktion, aber es holt alle Daten aus der Stadt, die mit dem Bürger in Verbindung stehen, während ich nur den Namen brauche.
Gibt es eine Möglichkeit, eine Abfrage zu schreiben, um eine einzelne Zelle aus der gesamten Zeile in EF auszuwählen, ohne neue Klassen oder Schnittstellen oder Repositorys erstellen zu müssen? Hier ist mein Include:
Citizen citizen = db.Citizens.Include("Cities").First(p => p.citizen_id == id);
Sie tun dies durch Projizieren, z
var c = from c in db.Citizens
where c.citizen_id == id
select new
{
Name = c.Name,
CityName = c.City.Name
};
Sie können auch auf POCOs projizieren.
Sie können der EF nicht City.Name
, ein Objekt des Typs Citizen
mit einer zugehörigen City
City.Name
, aber nur City.Name
. Verwenden Sie Ansichts- / Präsentationsmodelle oder DTOs anstelle von Entitäten, wenn Sie nur wenige Felder benötigen.