Ho un modello in cima al mio modello di database e mappa gli oggetti nel mio repository.Come utilizzare le classi factory con linq per sql?
Tuttavia, apparentemente fa la differenza se "selezionare nuovo" direttamente nel mio GetUsers o "selezionare factoryresult" come implementato di seguito. Ottengo l'errore in fase di esecuzione, che il metodo CreateFromDbModel non ha una traduzione in sql (System.NotSupportedException).
C'è un modo per aggirare questo? Posso ripararlo in qualche modo?
La ragione per voler utilizzare il metodo factory è che io possa instanciate oggetti altrove e vogliono mantenere il 'codice di mappatura' in un posto ...
Grazie per eventuali commenti, 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
};
}
Grazie Douglas e Rossisdead, ho provato a convertire alla lista prima di chiamare il mio metodo di fabbrica, ma non solo, devo restituire tutti i LINQ oggetti dal database, devo costruire anche tutti gli oggetti del mio modello di dominio - e stavo cercando di trovare un modo che non richiedesse questo ... Inoltre, faccio il filtraggio nel mio livello di servizio e dovrò riconvertire l'elenco in interrogabile. ... –
Ciao Anders, Vedere Modifica 2 sopra. – Douglas
Hi Douglas, Contrassegno la risposta come risposta, ma speravo di mantenere gli oggetti linq del database nel livello dati in cui il vostro suggerimento avrebbe esposto gli oggetti del livello dati al livello di servizio. –