Является ли LINQ лучшим решением в этом сценарии?LINQ to Dataset - PullRequest
1 голос
/ 30 мая 2011
  1. Является ли LINQ лучшим решением для автоматического сопоставления данных с объектами с использованием .NET?Может ли кто-нибудь предложить мне какое-то другое решение для автоматического создания таблицы базы данных и отображения хранимых процедур?

  2. Возможно ли преобразовать результат LINQ (или другое решение) в Dataset или Datatable автоматически?

Ответы [ 6 ]

6 голосов
/ 30 мая 2011

LINQ - это не ORM. Это просто расширение языка, которое обеспечивает синтаксис, похожий на SQL-запрос, и типы запросов, которые «интегрируют» выражения запросов в ваши программы. Он не отображает объекты в базу данных вообще.

Это говорит:

  1. LINQ to SQL - это ORM, использующий LINQ. Опять же, как вы видите, LINQ сам по себе не является ORM, но может использоваться в рамках ORM. Но, как уже упоминалось AHM, взгляните также на Entity Framework .

    Широко известным открытым исходным кодом .NET ORM является NHibernate , который действительно является портом .NET Hibernate для Java.

  2. В MSDN есть статьи по LINQ to DataSet , но это не связано с объектно-реляционным отображением.

1 голос
/ 30 мая 2011

Артур, ваш вопрос на самом деле не отвечает ни в коей мере, так как он написан.

Linq обозначает Language Integrated Query и сам по себе не является средой ORM (объектно-реляционное сопоставление).Однако есть ORM, которые активно используют Linq, у Microsoft есть два варианта: Linq to SQL и Linq to Entities Framework, есть также сторонние ORM, которые также используют Linq..NHibernate, например.

Тогда ваш последующий вопрос о преобразовании Linq в Dataset / Datatable, хотя на самом деле не имеет никакого смысла, также подразумевает, что вы предпочитаете работать с компонентами промежуточного программного обеспечения базы данных или связываться с ними, в большинстве случаев использование ORM довольно избыточно.

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

IEnumerable<Customer> Custs = someRepository.Customers();
foreach(Customer c in Custs)
{
  // Do something with the custs.
}

Вместо ...

var cmd = connection.CreateCommand();
cmd.CommandText = "Select * from customers";
using(var reader = cmd.ExecuteReader())
{
  // etc etc
}

Может быть, если бы вы могли опубликовать немного больше о том, чего вы пытаетесь достичь, мымог бы дать вам лучший совет.

1 голос
/ 30 мая 2011

Для нового приложения вам, вероятно, следует использовать либо Entity Framework, либо NHibernate.Оба являются зрелыми решениями ORM, и оба поддерживают LINQ для запросов, интегрированных в язык.

Опция LINQ-to-SQL является опцией, но в значительной степени устарела в пользу Entity Framework.Вы не должны использовать его для нового приложения.

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

1 голос
/ 30 мая 2011

Заполнение наборов данных или таблиц данных с помощью LINQ

LINQ to Dataset - Начало работы

LINQ to Dataset - Руководство по программированию

LINQ-запрос к датируемому Пример

var query1 = from i in items
             where i.Price > 9.99
             orderby i.Price
             select i;

// load into new DataTable
DataTable table1 = query1.CopyToDataTable();

Альтернативы LINQ to SQL

0 голосов
/ 30 мая 2011

Хотя LinqToSQL не является технически, а ORM, он отлично подойдет для замены основных функций, таких как непосредственное сопоставление таблиц и объектов.

Другим инструментом MS является Entity Framework, который поддерживает модели «Сначала модель», «Сначала база данных» и «Код сначала».

Entity Framework является более продвинутым, чем LingToSQL, так как он позволяет разбивать и комбинировать таблицы с различными объектами и намного более сложными опциями. Есть много хороших видео на http://www.asp.net или на Pluralsight

Я не уверен, можно ли легко преобразовать Linq в наборы данных и таблицы данных, но на самом деле в этом нет необходимости, он просто переключается с одного типа объекта данных на другой.

0 голосов
/ 30 мая 2011

1) LINQ - это язык запросов, это не ORM.Просто посмотрите вики-страницу для доступных ORM.Слишком сложно найти тот, который подходит вам лучше всего, не зная, где вы будете его использовать

2) Предложено hamlin11 + Castle Active Record выглядит как DataTable.Но я бы не совмещал DataSet и DataTable с ORM, поскольку в этих технологиях используются разные стратегии обновления памяти и данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...