Является ли SqlMetal хорошим решением для сопоставления с базой данных, содержащей * только * таблицы? - PullRequest
0 голосов
/ 24 декабря 2009

Я думаю об использовании SqlMetal для автоматической генерации кода LinqToSql для простой и небольшой базы данных. База данных будет содержать только таблицы с некоторыми первичными и внешними ключами (то есть без представлений, хранимых процедур, функций и т. Д.). Я хотел бы выполнять все объединения, группирование, сортировку и расширенные манипуляции с данными с помощью Linq.

У меня есть опыт работы с LinqToObjects и LinqToXml, но я никогда не использовал ни ORM, ни LinqToSql.

Некоторые вопросы:

  1. Насколько крута кривая обучения для SqlMetal / LinqToSql, учитывая мой предыдущий опыт?
  2. Надежен ли SqlMetal для простых баз данных?
  3. С какими неожиданностями я могу столкнуться?
  4. Как мне автоматизировать мой проект, чтобы код LinqToSql восстанавливался каждый раз, когда я собираюсь или, что еще лучше, перестраиваю свой проект? (Я буду использовать Visual Studio 2008.)
  5. Можете ли вы порекомендовать хороший учебник, который поможет мне быстро освоить SqlMetal и LinqToSql?

Ответы [ 2 ]

2 голосов
/ 24 декабря 2009

Ответ на ваш заглавный вопрос: да, это прекрасное решение для базы данных только с таблицами (и точка может вырасти, когда ваша база данных вырастет, включив в нее другие конструкции базы данных, такие как представления и хранимые процедуры).

  1. Довольно мелко. Основное отличие, которое вы обнаружите, заключается в том, что определенные методы, которые работают с Linq2Objects, не работают для Linq2SQL. Вы должны быть осторожны при смешивании объектов и Linq2SQL вместе. Вы поймете, что попали в это, когда получите исключение, говорящее что-то вроде «Единственное, что мы поддерживаем - это Содержит».
  2. Довольно.
    • Вы, вероятно, обнаружите, что в определенных ситуациях Linq2SQL не генерирует наиболее эффективный SQL.
    • Иногда с транзакциями может быть сложно.
    • Нет обновлений. Каждый раз, когда вы хотите обновить набор записей, вы должны выбрать их, обновить каждую, а затем SubmitChanges().
    • Если только вы не делаете выбор, вам нужен первичный ключ на вашем столе. Без первичного ключа вы не можете удалить или обновить.
    • Linq2SQL напрямую не поддерживает отношения «многие ко многим».
  3. Простое решение состоит в том, чтобы настроить задачу предварительной сборки, которая генерирует ваши DataContexts Linq2SQL при каждой сборке.

Что касается вашей цели использования Linq2SQL для всего, будьте готовы к некоторым неприятным запросам LINQ (и неприятным циклам отладки). Синтаксис объединения является многословным, и в зависимости от сложности ваших запросов его обслуживание может стать сложнее, чем в эквиваленте SQL. Группировать не так просто, как GROUP BY.

0 голосов
/ 24 декабря 2009

Если вы серьезно относитесь к LINQ, возьмите копию Linq в действии. Он охватывает все аспекты Linq и SqlMetal в простых для восприятия главах.

Также, если вам интересно, вы можете использовать SubSonic 3 , который использует шаблоны TT4 для генерации ваших моделей, что очень автоматизировано в VS2008. Затем вы используете обычные запросы Linq для доступа к данным. Это, наверное, самый простой путь.

...