2: Преимущества LINQ-to-SQL просты (но все же хорошо спроектированы), но недостатком является простота; -p
- LINQ-to-SQL работает только на SQL Server (Entity Framework является подключаемым; сторонние варианты LINQ-to-SQL, такие как DBLinq, охватывают некоторых других провайдеров)
- Entity Framework поддерживает большую абстракцию между моделью данных (хранилища) и объектной моделью - LINQ-to-SQL - это буквальная таблица / столбец => класс / свойство [| поле]
- LINQ-to-SQL на самом деле более "завершен" в том, что делает делает:
- EF не поддерживает UDF
- EF не поддерживает такие вещи, как вызов подвыражения (для деревьев пользовательских выражений)
- EF не поддерживает некоторые "очевидные" методы, такие как
Single()
- EF не имеет некоторых оптимизаций TSQL, которые использует LINQ-to-SQL
По сути, EF на данный момент представляет собой нечто большее, чем продукт "v1" (или даже "v0.9"). Однако (и важно) - EF, скорее всего, будет иметь правильную следующую версию в .NET 4.0 и т. Д., Где LINQ-to-SQL увидит гораздо меньше изменений. Он все еще поддерживается , но, как известно, Microsoft выбрала Entity Framework в качестве флагманского продукта (вместо того, чтобы совместно превращать оба продукта по существу друг в друга). Вы должны подумать о долгосрочных планах.
На данный момент Я очень рад использовать LINQ-to-SQL , но EF на долгосрочную перспективу ... поэтому я использую репозиторий и т. Д., Чтобы скрыть некоторую реализацию gory детали - немного дырявое хранилище, , но прагматично .
3: С LINQ-to-SQL назначьте TextReader
на dataContext.Log
; Console.Out
работает хорошо - или у меня есть тот, который пишет в trace.asax. С EF ToTraceString .
4: Я подозреваю, что это сильно ломается по сложности. Люди, использующие SQL Server с простыми моделями, или те, кто счастлив иметь модель хранения, которая вписывается в объектную модель, обычно используют LINQ-to-SQL (из того, что я вижу). Люди с большей сложностью и другими базами данных, как правило, используют NHibernate ;-p А затем некоторые EF. Мне интересно, насколько это изменится, когда EF выйдет в .NET 4.0 ...