Сведения о вопросе

Martincow

21:06, 1st October, 2020

Теги

c#   .net   sql   dataset    

C#: Что Еще Вы Используете, Кроме Набора Данных

Просмотров: 493   Ответов: 13

Я обнаружил, что все больше не удовлетворяюсь парадигмой DataSet/DataTable/DataRow в .Net, главным образом потому, что это часто на пару шагов сложнее, чем то, что я действительно хочу сделать. В тех случаях, когда я привязываюсь к элементам управления, DataSets-это нормально. Но в других случаях, по-видимому, существует изрядное количество умственных накладных расходов.

Я немного поиграл с SqlDataReader, и это, кажется, хорошо для простых прогулок через select, но я чувствую, что в .Net могут скрываться некоторые другие модели, о которых полезно узнать больше. Я чувствую, что вся помощь, которую я нахожу в этом, просто использует DataSet по умолчанию. Может быть, это и DataReader действительно лучшие варианты.

Я не ищу лучшего / худшего срыва, просто интересно, какие у меня есть варианты и какой опыт у вас был с ними. Спасибо!

- Эрик Сиппл



  Сведения об ответе

dump

20:06, 26th August, 2020

С тех пор как вышел .NET 3.5, я использовал исключительно LINQ. Это действительно так хорошо; я больше не вижу причин пользоваться этими старыми костылями.

Однако, как бы ни был велик LINQ, я думаю, что любая система ORM позволит вам избавиться от этого дрэка.


  Сведения об ответе

prince

07:55, 6th August, 2020

Мы отошли от наборов данных и построили свои собственные объекты ORM, свободно основанные на CSLA . Вы можете выполнить ту же самую работу с помощью DataSet, LINQ или ORM, но повторное использование его (как мы выяснили) намного проще. "Чем меньше кода, тем больше счастья".


  Сведения об ответе

DINO

17:21, 21st August, 2020

Я был сыт по горло DataSets в .Net 1.1, по крайней мере, они оптимизировали его так, чтобы он больше не замедлялся так экспоненциально для больших наборов.

Это всегда была довольно раздутая модель-я не видел много приложений, которые используют большинство ее функций.

SqlDataReader был хорош, но я обычно заворачивал его в IEnumerable<T> , где T было некоторым типизированным представлением моей строки данных.

Linq-это гораздо лучшая замена, на мой взгляд.


  Сведения об ответе

dump

09:35, 22nd August, 2020

Я использовал шаблон объектов передачи данных (первоначально из мира Java, я полагаю) с SqDataReader для заполнения коллекций DTOs из слоя данных для использования в других слоях приложения. DTOs сами по себе очень легкие и простые классы, состоящие из свойств с gets/sets. они могут быть легко serialized/deserialized, и использоваться для привязки данных, что делает их довольно хорошо подходящими для большинства моих потребностей в разработке.


  Сведения об ответе

repe

21:01, 16th August, 2020

Я большой поклонник SubSonic . Хорошо написанный файл batch/CMD может создать целую объектную модель для вашей базы данных за считанные минуты; вы можете скомпилировать ее в свой собственный файл DLL и использовать его по мере необходимости. Замечательная модель, замечательный инструмент. Сайт делает его похожим на сделку ASP.NET, но в целом он прекрасно работает практически везде, если вы не пытаетесь использовать его фреймворк UI (в котором я умеренно разочарован) или его инструменты автоматической генерации на уровне приложений.

Для справки, вот версия команды, которую я использую для работы с ней (так что вам не придется бороться с ней слишком сильно изначально):

sonic.exe generate /server [servername] /db [dbname] /out [outputPathForCSfiles] /generatedNamespace [myNamespace] /useSPs true /removeUnderscores true

Это происходит каждый раз ... Затем постройте DLL из этого каталога - это часть проекта NAnt, запущенного CruiseControl.NET - и мы уйдем. Я использую это в WinForms, ASP.NET, даже в некоторых utils командной строки. Это создает наименьшее количество зависимостей и наибольшее "portability" (между связанными проектами, EG).

Примечание

Вышеперечисленному сейчас уже далеко за год. В то время как я все еще храню большую любовь в своем сердце к SubSonic, я перешел к LINQ-to-SQL, когда у меня есть роскошь работать в .NET 3.5. В .NET 2.0 я все еще использую SubSonic. Так что мой новый официальный совет зависит от версии платформы. В случае .NET 3+, перейдите к принятому ответу. В случае с .NET 2.0 используйте SubSonic.


  Сведения об ответе

FAriza

19:36, 17th August, 2020

DataSets отлично подходят для демо-версий.

Я бы не знал, что с ним делать, если бы ты заставил меня им воспользоваться.

Я использую ObservableCollection

Затем я снова нахожусь в пространстве клиентских приложений, WPF и Silverlight. Таким образом, передача набора данных или datatable через сервис является ... валовой.

DataReaders являются быстрыми, так как они являются только прямым потоком результирующего набора.


  Сведения об ответе

прога

08:36, 25th August, 2020

Я использовал типизированный и нетипизированный DataSets, DataViewManagers, DataViews, DataTables, DataRows, DataRowViews, и почти все, что вы можете сделать со стеком, так как он впервые появился в нескольких корпоративных проектах. Мне потребовалось некоторое время, чтобы привыкнуть к тому, как это работает. Я написал пользовательские компоненты, которые используют стек как ADO.NETdid не совсем дают мне то, что мне действительно нужно. Один из таких компонентов сравнивает DataSets и затем обновляет внутренние хранилища. Я действительно знаю, как все эти элементы работают хорошо, и те, кто видел, что я сделал, очень впечатлены тем, что мне удалось выйти за пределы этого чувства, что это было полезно только для демонстрационного использования.

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

Я искал сегодня замену ADO.NET и не вижу ничего, что я должен серьезно попытаться научиться заменять то, что я сейчас использую.


  Сведения об ответе

lats

18:57, 24th August, 2020

Я использовал тип DataSets для нескольких проектов. Они хорошо моделируют базу данных, применяют ограничения на стороне клиента и в целом являются надежной технологией доступа к данным, особенно с изменениями в .NET 2.0 с TableAdapters.

Набранные DataSets получают плохой рэп от людей, которые любят использовать эмоциональные слова, такие как "bloated", чтобы описать их. Я признаю, что мне нравится использовать хороший o/R mapper больше, чем использовать DataSets; просто "feels" лучше использовать объекты и коллекции вместо типизированных DataTables, DataRows и т. д. Но я обнаружил, что если по какой-либо причине вы не можете или не хотите использовать o/R mapper, тип DataSets-это хороший надежный выбор, который достаточно прост в использовании и даст вам 90% преимуществ o/R mapper.

EDIT:

Некоторые здесь предполагают, что DataReaders-это альтернатива "fast". Но если вы используете рефлектор, чтобы посмотреть на внутренние части DataAdapter (которые заполнены DataTables), вы увидите, что это uses...a DataReader. Тип DataSets может иметь больший объем памяти, чем другие варианты, но я еще не видел приложения, где это имеет ощутимую разницу.

Используйте лучший инструмент для этой работы. Не принимайте решение на основе эмоциональных слов, таких как "gross" или "bloated", которые не имеют под собой никакой фактической основы.


  Сведения об ответе

P_S_S

20:07, 24th August, 2020

Я использую их широко, но я не использую ни одну из функций "advanced", которые Microsoft действительно продвигала, когда платформа впервые вышла. Я просто использую их в качестве списков хэш-таблиц, которые считаю совершенно полезными.

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

Конечно, я один из тех странных людей, которые на самом деле предпочитают DataRow экземпляру объекта сущности.


  Сведения об ответе

dumai

20:55, 24th August, 2020

До linq я использовал DataReader для заполнения списка моих собственных пользовательских объектов домена, но после linq я использовал L2S для заполнения объектов L2S или L2S для заполнения объектов домена.

Как только я получу немного больше времени для исследования, я подозреваю, что объекты Entity Framework станут моим новым любимым решением!


  Сведения об ответе

9090

06:43, 17th August, 2020

Выбор современного, стабильного и активно поддерживаемого инструмента ORM должен быть, вероятно, самым большим boost для повышения производительности практически любого проекта умеренного размера и сложности. Если вы пришли к выводу, что вам абсолютно, абсолютно, абсолютно необходимо написать свои собственные DAL и ORM, вы, вероятно, делаете это неправильно (или вы используете самую малоизвестную в мире базу данных).

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

Я люблю некоторые Subsonic, хотя для небольших проектов наряду с demos/prototypes, я нахожу Linq - Sql чертовски полезными. Хотя я ненавижу EF со страстью. :P


  Сведения об ответе

DINO

00:32, 4th August, 2020

Я просто строю свои бизнес-объекты с нуля и почти никогда не использую DataTable и особенно DataSet больше, кроме как для первоначального заполнения бизнес-объектов. К преимуществам создания собственного приложения относятся тестируемость, безопасность типов и intellisense, расширяемость (попробуйте добавить к DataSet) и читаемость (если вам не нравится читать такие вещи, как Convert.ToDecimal(dt.Rows[i]["blah"].ToString())).

Если бы я был умнее, я бы также использовал фреймворк ORM и 3rd party DI, но просто еще не чувствовал необходимости в них. Я делаю много небольших проектов или дополнений к большим проектам.


  Сведения об ответе

nYU

13:49, 18th August, 2020

Я никогда не использую наборы данных. Они являются большими тяжеловесными объектами, которые можно использовать только (как кто-то указал здесь) для "demoware". Есть много отличных альтернатив, показанных здесь.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться