2009-03-06 8 views
9

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

С какой бы я прочитал, я думаю, что есть 2 различных способов взаимодействия с базами данных:

  • Linq к SQL
  • Linq в DataSet

Теперь продукт, который я должен работать, не может полагаться на тип базы данных. Например, он может быть развернут с SQL-сервером/Oracle.

Теперь мои вопросы:

  1. Если я использую Linq к SQL, я застрял только с SQL сервером?
  2. Я думаю, что я могу использовать Linq для DataSet для SQL-сервера и оракула. Но я что-то потеряю (простота программирования, производительность, надежность и т. Д.), Если я использую Linq для DataSet для SQL-сервера (по сравнению с Linq to SQL offcourse).
+0

и третий вариант: ADO Entity Framework (поверх Linq для объектов) – RobS

ответ

11

Вы считаете правильным использовать # 1 - Linq to Sql будет работать только с базами данных SQL Server.

Я бы пошел с ADO Entity Framework, если вы хотите иметь доступ к различным источникам данных (используя разные провайдеры). Вы получаете такую ​​же гибкость с точки зрения использования POCO-подобных объектов, и ее довольно легко расширить для более сложных/сложных реализаций.

В моем текущем проекте мы используем Linq для Sql, и все было хорошо, но у нас было несколько проблем для преодоления. Я обнаружил, что это слишком упрощенно, с точки зрения расширяемости. Я написал (лучший) ответ относительно Linq to Sql и Entity Framework here.

Что касается вопроса №2 - я не уверен, что хотел бы вернуться к DataSets. ИМХО они больше ушли в прошлое, но могут быть полезны, если у вас есть достойный инструментарий со специфическими элементами управления (например, Infragistics). Однако я считаю, что их накладные расходы слишком дороги для быстрых транзакционных систем. Реализация не имеет половины функциональных возможностей Linq to Sql или Entity Framework.

3
  1. Да, это только SQL Server. Кроме того, Microsoft заморозила L2S и не будет дорабатывать ее дальше. Но это хорошая структура, отлично работает и проста в использовании.
  2. Linq to DataSet обращается к наборам данных в качестве счетчиков после того, как данные были извлечены из БД. Linq to SQL использует IQueriable для создания динамических SQL-запросов. Во многих случаях L2S будет работать намного лучше, и вы вообще не сможете писать код DB.

Вы должны изучить Linq для Entities. Это наиболее полномасштабная инфраструктура. Прямо сейчас, это в основном для SQL Server, но у вас будет поддержка Oracle и т. Д. Вовремя.

2
  1. Вы не застряли только с SQL-сервером. Теоретически вы можете создать провайдера linq для любой базы данных. Существует проект по Codeplex для Linq для Oracle http://www.codeplex.com/LinqToOracle. Я сам не пробовал.

  2. Как вы получите данные в набор данных?Я не думаю, что вы собираетесь собрать всю таблицу в набор данных? Это будет серьезной проблемой производительности. Если вы собираетесь использовать Linq для набора данных, вам нужно будет написать все SQL-запросы самостоятельно, чтобы получить данные из базы данных, вместо того чтобы позволить linq создавать sql-запросы. Поэтому вам сначала нужно будет запросить базу данных, а затем запросить набор данных. Кажется, что мне нужна двойная работа ...

1

Когда вы используете Linq to SQL, вы, как я знаю, довольно сильно застряли бы с SQL Server.

Если вы используете Linq для DataSet, вы потеряете немного облегчения программирования: с Linq вы можете использовать объекты Linq напрямую, используя DataSets, вы должны продолжать использовать имя DataSet (MyDataSet.Entity = new MyDataSet.Entity()), который стареет через некоторое время. Я думаю, что это единственная жертва.

Однако вы можете использовать его, например. Oracle (сделал это по проекту). Это также довольно много перетаскивания с немного большим контролем над DataAdapter (насколько мне известно - мне никогда не приходилось так сильно настраивать Linq-to-SQL), вы можете указать (например), какие запросы использовать , и т. д.

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

Я полагаю, что надежность с Linq-to-DataSet как с Linq-to-SQL, так и с Linq-to-SQL (никогда не было проблем), производительность, казалось, была достаточно хороша, но никогда не могла ее профилировать.

4

Чтобы ответить на ваш первый вопрос: нет, есть другие реализации поставщиков Linq для оракула, например:

LinqToOracle

DbLinq

Последние поддерживающие несколько баз данных, как и SQLite.

Также заказываем ADO.NET Entity Framework.

1

Вы не придерживаетесь только SQL Server. Мы предлагаем реализации LINQ to SQL для серверов Oracle, MySQL, PostgreSQL и SQLite. Получить дополнительную информацию here DataSets не так удобны по сравнению с технологией LINQ to SQL. Проверьте вариант Entity Framework в качестве альтернативы. Вы можете написать несколько моделей хранения с одной концептуальной моделью, а затем использовать SQL Server и базу данных Oracle параллельно.