Я начинаю разрабатывать новое приложение, и меня интересует мнение людей о Linq2SQL или Linq2Entities и о том, что, по их мнению, является лучшей технологией для быстрой разработки.
Я также изучаю службы обработки данных ADO.net.
Я начинаю разрабатывать новое приложение, и меня интересует мнение людей о Linq2SQL или Linq2Entities и о том, что, по их мнению, является лучшей технологией для быстрой разработки.
Я также изучаю службы обработки данных ADO.net.
Я большой поклонник LINQ to SQL, если вы отвечаете следующим требованиям к дизайну:
Я не очень много работал с Entity Framework, но из того, что я знаю и что я сделал, так это то, что он не имеет такой хорошей производительности при создании из той же базы данных, что и LINQ to SQL.
Более низкая производительность связана с природой Entity Framework, она использует ADO, а не конкретных поставщиков для сервера базы данных, который вы используете.
Да, согласен со Слэйсом.
Просто будьте осторожны с выбранной вами структурой, чтобы убедиться, что она соответствует всем вашим потребностям.
Например, я недавно исключил Entity Framework из рабочего проекта после того, как поработал с ним довольно солидно в течение последних двух недель, поскольку он не удовлетворил мои потребности, в основном из-за: -
В остальном команды и фреймворк казались простыми и аккуратными, и причина, по которой я выбрал EF, заключалась в следующем:
Дальнейшее чтение (еще одно сообщение SO):
Живой или мертвый LINQ to SQL?
Я хотел бы выбрать EF, я действительно не знаю, что делать с отключением L2S и EF, и если L2S действительно мертвый утенок, пожимайте плечами. По общему признанию, моя основная проблема с EF - это NotSupportedException - я мог бы обойти ленивую загрузку, если бы мог выполнять вызовы методов в linq, не получая этого ...
Я бы сказал, что для простой или умеренной схемы базы данных Linq2SQL работает очень хорошо, и ее проще настроить и использовать. Это то, что я использую для своего ORM с некоторыми небольшими корректировками через частичные классы для поддержки проверки и авторизации / аудита. Я использую дизайнер DBML и добавляю свои таблицы / отношения. Я изменяю DataContext, чтобы сделать его абстрактным и построить конкретную реализацию, которая позволяет мне предоставлять реализации моих функций / хранимых процедур с табличными значениями (которые отображаются в контексте данных как методы), которые предоставляют перехватчики для аудита и авторизации. Я реализую частичные методы в классах сущностей для OnValidate и OnLoad, чтобы выполнять как проверку, так и авторизацию на уровне таблицы. Я считаю, что это почти все, что мне нужно. В последнее время я определял интерфейс и оболочку для конкретного контекста данных, чтобы позволить мне имитировать его в своих модульных тестах.
Для использования со службами данных ADO.NET (о которых вы упомянули) Entity Framework работает из коробки. Если вы хотите обновить данные с помощью LINQ-to-SQL (через ADO.NET Data Services), вам нужно проделать некоторую работу для реализации IUpdatable. К счастью, я писал об этом на этой неделе.
Мои общие мысли между ними изложены здесь, но с тех пор я немного смягчился, см. здесь.
По сути, на данный момент я предпочитаю LINQ-to-SQL, но я ожидаю, что EF будет более пригодным для использования в следующей версии. Поэтому я работаю над тем, чтобы LINQ-to-SQL работал с ADO.NET Data Services.
Я думаю, что Linq 2 Sql - отличный выбор. Несколько моментов:
Я голосую за Linq-to-SQL. Он соответствует вашему сценарию быстрого развития; легко начать, легко использовать. Вдобавок он генерирует хорошие / эффективные SQL-запросы из выражений Linq.
Linq-to-Entities неуклюж, если вы попытаетесь использовать любую из `` расширенных '' функций, которые должны отличать его от L2S, вам придется начать редактировать файл модели EDMX с помощью редактора XML (вы скоро запустите в «ограничения» в конструкторе, где единственным обходным путем / решением, рекомендованным Microsoft, является использование редактора XML для ручного запуска EDMX). Вдобавок к этому он имеет тенденцию генерировать действительно плохие / неэффективные SQL-запросы.
Microsoft заявляет, что следующая версия Entity Framework будет намного лучше и будет поддерживать все преимущества L2S. Однако следующая версия не будет выпущена в ближайшее время, так что до тех пор L2S - ваш лучший выбор.
Я бы рекомендовал поискать решения для ORM сторонних разработчиков. nHibernate - отличное решение, в котором есть все плюсы обеих этих фреймворков, а также многое другое. Да, это более крутая кривая обучения, но беглый nHibernate помогает в этом. Это того стоит.
Никто не может сказать Вам определенно что лучше.
У обоих техников есть проблемы (у NHibernate тоже есть проблемы).
Я использую Linq-to-SQL и очень доволен этим. На мой взгляд проблем в Linq-to-SQL меньше, чем в EF ^ _ ^.
Это довольно старый вопрос, но меня беспокоит поддержка LinqToSql среди самых популярных ответов. У LinqToSql есть существенные недостатки.
Не используйте Visual Studio 2008 LinqToSql O / R Designer
Недостатки перехода на Linq To Sql
Тем не менее, у EntityFramework есть и существенные недостатки.
Доступны гораздо, намного лучшие варианты (на данный момент лучшим вариантом является NHibernate).
Мы думали, что L2S великолепен, пока не попробовали делать обновления. Тогда это было жалко. Мой коллега выполнял большую часть этой работы, а я занимался другими делами. Он рассказал об EF и о том, как чрезмерная настраиваемость делает его беспорядочным в использовании.
Я предположил, что, поскольку мы нацелены на MSSQL и это не изменится, он мог взломать все абстракции поставщика базы данных. Некоторое время спустя он сказал мне, что это хорошее предложение, и его код был намного проще и менее сложным в обслуживании.
Мне любопытно, на основании чего этот ответ был отклонен против. В нем описывается реальный опыт, обсуждается альтернативная стратегия и относительный успех этого подхода. Голосование против ответов предназначено для ответов, которые вводят в заблуждение, фактически неверны или просто троллинг.
Так получилось, что я изменил свою позицию в отношении EF против L2S, но это не меняет того факта, что отрицательное голосование просто потому, что оно выражает мнение, отличное от вашего, является инфантильным и полностью противоречит духу StackOverflow.
В наши дни Linq to SQL - это тупик, потому что Microsoft больше не собирается его обновлять. Некоторое время я использовал его для своих собственных проектов, но обнаружил, что он недостаточно мощный по сравнению с настоящим SQL. Конечно, в краткосрочной перспективе это может показаться проще, но в ходе цикла разработки приложения вы обнаружите, что вам больше нравится мощь SQL.
Я думаю, что LINQ TO SQL следует принимать только тем, кто сильно зависит от уровней абстракции фреймворка и не имеет времени / энергии / желания заниматься SQL.
Еще одна вещь, которую вы должны помнить, - это то, что дополнительный уровень между SQL и вашим приложением имеет свою стоимость. Вы не так легко заметите разницу в скорости, но она есть.
Лично я рекомендую тем, кто только начинает, сразу перейти к SQL и пропустить LINQ to SQL.