Mam model na szczycie mojego modelu bazy danych i odwzorowuję obiekty w moim repozytorium.Jak używać klas fabrycznych z linq dla sql?
Jednak najwyraźniej robi różnicę, czy "wybieram nowy" bezpośrednio w moich GetUsers lub "wybierz fabrykę" jak zaimplementowano poniżej. Otrzymuję błąd w czasie wykonywania, że metoda CreateFromDbModel nie ma tłumaczenia na sql (System.NotSupportedException).
Czy istnieje sposób obejścia tego? Czy mogę go jakoś naprawić?
Powodem chcąc użyć metody fabryki jest, że mogę instanciate obiektów gdzie indziej i chcesz zachować „kod mapowania” w jednym miejscu ...
Dzięki za wszelkie komentarze, 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
};
}
Dzięki Douglas i Rossisdead, próbowałem konwersji do listy przed wywołaniem moje metody fabryki, ale nie tylko muszę wrócić cały LINQ obiektów z bazy danych, muszę również zbudować wszystkie moje obiekty modelu domeny - i próbowałem znaleźć sposób, który nie wymagał ... Ponadto dokonuję filtrowania w mojej warstwie usługi i będę musiał przekonwertować listę z powrotem na zapytanie. ... –
Witam Anders, Zobacz Edytuj 2 powyżej. – Douglas
Witaj, Douglas, Oznaczam twoją odpowiedź jako odpowiedź, ale miałem nadzieję, że utrzymam obiekty linq bazy danych w warstwie danych, w której Twoja sugestia wystawiłaby obiekty warstwy danych na warstwę usługi. –