В чем разница между Entity Framework и LINQ to SQL в .NET 4.0?
==============================================================

 Я проверял [2-е издание Professional ASP.NET MVC](https://rads.stackoverflow.com/amzn/click/com/0470643188) и понял, что EF заменил LINQ на SQL. Я знаком с LINQ to SQL из первой книги, но ничего не знаю об EF. В любом случае, при чтении кода кажется, что ничего не изменилось, кроме названия. Те же старые классы репозитория, те же старые функции. 

 Я сделал небольшое исследование. Я знаю, что LINQ не ограничивается SQL. Также EF не ограничивается Microsoft-семейством SQL-серверов. [В этом двухлетнем вопросе](https://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql) люди не довольны EF, говоря, что он слишком сложен и все такое. Но сейчас я читаю тот же код под именем EF. Только классы создаются с помощью ADO.NET Entity Model, установленной из LINQ to SQL. Кто-нибудь может прояснить суету об особенностях EF, поскольку сейчас это де-факто стандартная ORM? 

 Они в некоторой степени похожи и могут использоваться очень похожим образом с точки зрения кода, но у них есть некоторые важные различия. Обратите внимание, что «LINQ» - это не то же самое, что «LINQ to SQL»; EF также использует LINQ. Некоторые заметные различия: 

* LINQ to SQL - это в основном только SQL Server, причем не столько по замыслу, сколько по реализации. EF предназначен для поддержки и поддерживает несколько БД, если у вас есть совместимый поставщик ADO.NET.
* У LINQ to SQL очень мало возможностей для изменения метаданных БД. Вы должны восстановить части вашей модели с нуля, и вы потеряете настройки.
* EF поддерживает функции модели, такие как отношения «многие ко многим» и наследование. LINQ to SQL не поддерживает их напрямую.
* В .NET 3.5 LINQ to SQL гораздо лучше поддерживал специфичные для SQL Server функции, чем EF. В большинстве случаев это не так в .NET 4; они довольно похожи в этом отношении.
* EF позволяет выбрать моделирование сначала, DB сначала или Code First. LINQ to SQL, из коробки, действительно поддерживает только DB First.