J'ai un modèle au-dessus de mon modèle de base de données et mappe les objets dans mon dépôt. Cependant, apparemment, cela fait une différence si je "sélectionne" directement dans mes GetUsers ou "select factoryresult" comme implémenté ci-dessous. J'obtiens l'erreur à l'exécution, que la méthode CreateFromDbModel n'a pas de traduction en sql (System.NotSupportedException).Comment utiliser les classes de fabrique avec linq pour sql?
Y a-t-il un moyen de contourner cela? Puis-je le réparer d'une manière ou d'une autre?
La raison de vouloir utiliser la méthode de fabrication est que je pourrais instancier des objets ailleurs et que vous souhaitez garder le « code de mappage » dans un endroit ...
Merci pour tous les commentaires, 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
};
}
Merci Douglas et Rossisdead, J'ai essayé de convertir en liste avant d'appeler ma méthode d'usine, mais non seulement dois-je retourner tout le linq objets de la base de données, je dois aussi construire tous mes objets de modèle de domaine - et j'essayais de trouver un moyen qui n'exige pas cela ... En outre, je fais le filtrage dans ma couche de service et je vais devoir interrogeable. ... –
Hi Anders, Voir Edit 2 ci-dessus. – Douglas
Salut Douglas, Je marque votre réponse comme la réponse, mais j'espérais conserver les objets linq de la base de données dans la couche de données où votre suggestion exposerait les objets de la couche de données à la couche de service. –