2009-08-24 3 views
2

Я собираюсь начать новый проект и решить, какую технологию доступа к данным я буду использовать ... Мне очень нравится LINQ to SQL по разным причинам, но я должен начать новый проект используя вместо этого Entity Framework?Linq to SQL для нового проекта

У меня такое восприятие, что структура Entity Framework более раздута и излишне сложна, что объясняет часть причины, по которой я думал о LINQ to SQL ... но, как я уже сказал, это может быть только восприятие на моей стороне так как я еще не использовал Entity Framework.

Так что люди рекомендуют использовать для запуска нового проекта сегодня (обратите внимание, что это приложение будет на долгие годы)?

Приветствия Энтони

EDIT: Мы SQL магазин серверов, поэтому мы не нужны поставщика базы данных независимой.

Также общепринятый наилучший способ абстрагирования доступа к данным с помощью шаблона репозитория, который работает с моими объектами домена?

+2

Обсуждалось много раз. См. Http://stackoverflow.com/questions/364740/linq-2-sql-or-linq-entities. Ваше восприятие истинно, кстати. Не используйте EF, если вам не нужны абстрактные поставщики баз данных, и ваше приложение находится только на SQL Server. –

+1

В L2S существует множество раздражающих ограничений, таких как свойства навигации, которые не являются «IQueryable», или нет возможности извлекать вложенные структуры данных с более чем двумя уровнями (например, Customer/Orders/OrderItems) в одном запросе SQL. Один размер не подходит для всех, и я хотел бы настоятельно рассмотреть все известные ограничения L2S и EF и посмотреть, как они соответствуют требованиям для конкретного проекта, прежде чем принимать решение. Здесь нет «разумного дефолта». –

ответ

3

LINQ to SQL - это быстрое развитие и простота. Если ваша модель данных является сложной или может стать такой, вам будет лучше использовать более надежную структуру.

Сказанное, более важным, чем ваш инструмент доступа к данным, является то, насколько хорошо вы абстрагируете его от остальной части вашего кода. Сделано правильно, вы можете начать с LINQ to SQL и переключиться, когда вы перерасти его (или когда выйдет EF 4).

1

Linq to SQL лучше всего работает в активной записи/одной таблице для класса. Если вам нужно охватить ваш класс по нескольким таблицам или поддерживать сложное наследование, то это может быть не лучший выбор. Кроме того, Linq to SQL не поддерживает отношения «многие-ко-многим» (есть обходные пути).

Если ни один из них не звучит так, как будто они повлияют на вас, тогда Linq 2 SQL может быть хорошим выбором. Это отличная облегченная стратегия доступа к данным.

Linq to SQL может использоваться для реализации шаблона репозитория, очень хорошо учитывая приведенные выше ограничения. Google представит несколько жизнеспособных примеров репозитория Linq.

2

Обратите внимание, что EF 1 далек от завершения. В нем отсутствуют всевозможные функции, которые вы найдете в LINQ to SQL, одним из наиболее важных из которых является фактическое свойство внешнего ключа (можете ли вы представить, что они не существуют в EF 1?)

Кроме того, EF 4 будет в значительной степени имеют все возможности LINQ TO SQL, и оба будут генерировать относительно сопоставимый (кодовый) внешний API, поэтому, если вы не кодируете специфические API с LINQ to SQL, в относительно легкий переход к EF4 следует «просто», заменив LINQ на SQL .dbml эквивалентом EF4.

+0

Есть несколько дополнительных сложностей вокруг синтаксиса update/insert, отслеживания изменений и разрешения конфликтов параллелизма, которые не следует отклонять. – DamienG

+0

Предоставлено, но если вы инкапсулируете эти части и главным образом используете LINQ, переход не должен вызывать слишком много головных болей. – Ruben

0

Вы ознакомились с Subsonic - теперь в версии 3 это в основном linq to sql DAL, что позволяет иметь полный linq для sql всей вашей базы данных менее чем за 5 минут. И он убегает шаблоны T4, так что если вы хотите добавить к шаблонам это ОЧЕНЬ ПРОСТО

http://www.subsonicproject.com/

0

Я написал довольно длинное сообщение в блоге на выбор.NET ОРМ:

.NET and ORM - Decisions, decisions

В основном, NHibernate является лучшим выбором. Если вы настаиваете на чем-то с простотой, например LinqToSql, рассмотрите SubSonic. Я бы не рекомендовал ни один из вариантов Microsoft: LinqToSql или EntityFramework.

Решение о том, следует ли использовать шаблон хранилища или нет, зависит от ваших требований.

+0

Я помню, что поддержка NHibernate LINQ довольно ограничена в виде запросов, которые она может обрабатывать (т. Е. Было довольно легко написать менее тривиальный запрос и не скомпрометировать его) и в целом помечены авторами как экспериментальные. Это изменилось? –

+0

Я мог бы рассказать о различных уровнях поддержки ORM для Linq, но я не видел ничего реального, насколько данные в этом отношении. Это обсуждение должно основываться на реальных данных и, насколько я знаю, данных не существует. Похоже, что для сбора этих данных потребуется довольно много усилий. –