Должен ли я использовать Entity Framework, DataSet или пользовательские классы?
===============================================================================

 Мне действительно тяжело здесь. Мне нужно спроектировать «Настольное приложение», которое будет использовать WCF в качестве канала связи. Это многоуровневое приложение (БД и сервер приложений одинаковы, клиент проходит через интернет-облако). 

 Приложение немного сложнее (с точки зрения SQL и логики кода), чем обычные LOB-приложения, но концепция та же: чтение из БД, обновление до БД, обработка параллелизма и т.д. Открыто, я не могу решить, какой путь продолжить: Должен ли я использовать Entity Framework, Dataset или Custom Classes. 

 Как я понимаю по Entity Framework, он создаст объектное отображение моих таблиц БД, ТАКЖЕ С CRUD-скриптами. Это хорошо для простого CRUD, но в большинстве случаев «выбор» сложен и требует специального SQL. Я понимаю, что могу использовать хранимые процедуры в EF (мне не нравится SP, кстати, я не знаю, почему, мне нравится кодировать свой SQL в DAL вручную, я чувствую себя более безопасным и удобным в этом смысле). 

 С DataSet я буду использовать свои собственные SQL и заполнять набор данных. С помощью пользовательских классов (объектов для таблиц БД) я буду заполнять свои пользовательские SQL-запросы этими пользовательскими классами (коллекциями, списками и т. Д.). Я хочу использовать EF, но я не чувствую уверенности в развертывании приложения, SQL которого я не написал и не вижу в коде. Я что-то здесь упускаю? 

 Любая помощь в этом отношении будет принята с благодарностью. 

 Xeshu 

 Я бы согласился с Марком Г. 100% - DataSets отстой, особенно в сценарии WCF (они добавляют много накладных расходов для обработки данных в памяти) - не используйте их. Возможно, они подойдут для начинающих и двухуровневых настольных приложений небольшого масштаба, но я бы не стал использовать их в серьезном профессиональном приложении. 

 По сути, ваш вопрос сводится к тому, как вы преобразуете свои строки из базы данных в нечто, что вы можете удаленно использовать через WCF. Это означает некоторую форму отображения - либо вы делаете это самостоятельно, используя DataReaders, а затем помещаете все данные в классы WCF `[DataContract]` - вы, безусловно, можете сделать это, предоставляя вам полный контроль, но это также утомительно, громоздко и ошибочно склонный. 

 Или же вы позволите какой-нибудь готовой ORM справиться с этой непосильной работой для вас - выбирайте среди Linq-to-SQL (отличный, простой в использовании, гибкий, но только SQL Server), EF v4 (к марту 2010 года - выглядит) очень многообещающе, очень гибко) или любой другой ORM, действительно - все, что соответствует вашим потребностям лучше всего. 

 Другими серьезными конкурентами в пространстве ORM могут быть Subsonic 3.0 и NHibernate (среди многих других). 

 Итак, подведем итог: 

* забыть о наборе данных
* либо у вас есть 100% контроль и сопоставление между SQL и вашими объектами самостоятельно
* Вы позволяете некоторым способным ORM справиться с этим (Linq-to-SQL, EF v4, Subsonic, NHibernate и др.), что на самом деле не имеет большого значения, то есть это также вопрос личных предпочтений и стиля кодирования.