LINQ to SQL Datacontext сопоставление с WCF DataContract - PullRequest
1 голос
/ 22 января 2012

Я пишу простую базу данных фильмов, которая имеет трехуровневый стек служебного слоя, слоя доступа к данным и базы данных SQL.

Я использую LINQ to SQL для доступа к базе данных и возврата фильмаКинопленка в БД.Затем он будет возвращен как объект Film из DataContracts в слое обслуживания.

Я думал, что это будет работать нормально, но это привело к некоторому неудобному коду, который выглядит неправильно.Может кто-нибудь здравомыслие проверить это, пожалуйста?

Лучше ли сопоставлять каждый результат LINQ с его DataContract?

public static class DBConnection
{
    private static RMDB_LINQDataContext _db;

    static DBConnection()
    {
        _db = new RMDB_LINQDataContext();
    }


    public static RMDB.DTO.Film GetFilm(string name)
    {
        var LINQ_film = from film in _db.GetTable<Film>()
                        where film.name == name
                        select film;

        if (LINQ_film.ToList().Count != 1)
        {
            // TODO - faultException
        }
        else
        {
            foreach (Film f in LINQ_film.ToList())
            {
                // Yuck
                return new RMDB.DTO.Film(f.name, 
                    f.releaseDate.GetValueOrDefault(), "foo", f.rating.GetValueOrDefault());
            }
        }

        return null;
    }

1 Ответ

1 голос
/ 22 января 2012

это немного точнее и эффективнее, поскольку ваша формулировка выполняет запрос дважды

    public static List<Film> GetFilm(string name)
    {
        var LINQ_film = from film in _db.GetTable<Film>()
                        where film.name == name
                        select new Film(film.name,
                                        film.releaseDate.GetValueOrDefault(), 
                                        "foo", 
                                        film.rating.GetValueOrDefault());

        var list = LINQ_film.ToList();
        if (list.Count != 1)
        {
            // TODO - faultException
        }

        return list;
    }

Копирование одного экземпляра типа в другой является стандартной практикой при отображении из объекта домена в DTO.Может показаться, что это намного больше работы, но это чисто картографическое отображение, обеспечивающее уровень изоляции между вашим бизнес-уровнем и вашими клиентами.Без этого на клиентов повлияет рефакторинг бизнес-уровня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...