Ich habe ein Modell über meinem Datenbankmodell und mappe die Objekte in meinem Repository.Wie verwendet man Factory-Klassen mit linq für sql?
Offenbar macht es aber einen Unterschied, ob ich "neu" direkt in meinen GetUsers auswähle oder "Factory-Ergebnis auswählen" wie unten implementiert. Ich bekomme den Fehler zur Laufzeit, dass die Methode CreateFromDbModel keine Übersetzung in sql (System.NotSupportedException) hat.
Gibt es einen Weg um dies? Kann ich es irgendwie reparieren?
Der Grund für den Wunsch, die Factory-Methode zu verwenden, ist, dass ich Objekte an andere Stelle instanziiert könnte und den ‚Mapping-Code‘ an einem Ort halten will ...
Vielen Dank für alle Kommentare, Anders
public IQueryable<User> GetUsers(bool includeTeams)
{
return from u in _db.sc_Players
where (includeTeams || (!u.aspnet_User.sc_Player.IsTeam))
select UserFactory2.CreateFromDbModel(u);
}
public static User CreateFromDbModel(sc_Player player)
{
return new User
{
Id = player.sc_PlayerID,
FirstName = player.FirstName.Trim(),
LastName = player.LastName.Trim(),
PresentationName = player.FirstName.Trim() + " " + player.LastName.Trim(),
LoginName = player.aspnet_User.LoweredUserName,
IsTeam = player.IsTeam,
Email = player.aspnet_User.aspnet_Membership.Email,
Password = player.aspnet_User.aspnet_Membership.Password
};
}
Dank Douglas und Rossisdead, Ich habe versucht, um zu listen, bevor ich meine Fabrikmethode nenne, aber nicht nur muss ich die ganze linq zurückgeben Objekte aus der Datenbank, ich muss auch alle meine Domänenmodellobjekte konstruieren - und ich habe versucht, einen Weg zu finden, der das nicht erfordert ... Außerdem mache ich Filterung in meiner Serviceebene und muss die Liste zurück in konvertieren abfragbar. ... –
Hallo Anders, Siehe Bearbeiten 2 oben. – Douglas
Hallo Douglas, Ich markiere deine Antwort als die Antwort, aber ich hatte gehofft, die Datenbank Linq Objekte in der Datenschicht zu halten, wo Ihr Vorschlag die Datenschicht Objekte der Service-Schicht ausgesetzt wäre. –