2010-05-13 4 views
1

До сих пор в моих приключениях для кодирования .Net мне только нужно было сохранять информацию в файлы. Поэтому я использовал XmlSerializer и DataContractSerializer для сериализации атрибутивных классов в XML-файлах. Однако для моего следующего проекта я сохраняю и извлекаю информацию из базы данных SQL-сервера. Мне интересно, какие у меня варианты для этого.Сохранять объекты в базе данных?

В текущей версии приложения, которое не было создано мной, используется множество жестко закодированных SQL-команд. Но теперь я стараюсь не делать ничего, где я должен читать или писать отдельные поля в базу данных или объекты или из нее. Я особенно хочу избежать большого количества жестко закодированного SQL в моем коде. Мне нравится, как классы сериализатора просто определяют, как читать и писать XML-файлы на основе атрибутов и/или общедоступных свойств этого класса. Есть ли что-то подобное для базы данных, а не XML?

+1

Почему бы не использовать ORM, как LINQ-To-SQL или NHibernate? Оба будут избегать «жестко запрограммированного SQL». –

+1

Вы считали * 'OBJECT DATABASE' *? Как Perst, eXtreme DB, Cache? – Guru

ответ

2

Object Relational Mapping

Есть куча продуктов там, самый известный из которых NHibernate, есть несколько конкурирующих продуктов, предлагаемых Microsoft в Linq 2 Sql и Entity Framework (вы должны использовать позже, но каждый использует сначала, как и waaaay проще).

Вы можете увидеть хороший (хотя я подозреваю, предвзято) сравнение ORM предложений на http://ormbattle.net/

0

При использовании баз данных не существует типа общего типа. Только таблицы и поля. Комбинация этих объектов может сделать объект. Лучше всего использовать хранимые процедуры, если речь идет о жестко закодированном SQL на клиентском коде.

Я также в основном ссылаюсь на фактические типы полей в базе данных. ORM - это совсем другая история. Если вы хотите просмотреть nHibernate, если вы хотите, чтобы реляционный сопоставитель объектов мог помочь с INSERT, SELECT и т. Д.

0

В зависимости от проекта ORM вроде NHibernate может быть тем, что вы ищете. Что-то, где вы сопоставляете информацию о своей базе данных с классами, и ORM заботится о вставках, удаляет и выбирает для вас без ручного SQL. Это также позволяет перейти на другую систему баз данных без тонны перезаписи.

Я говорю, что это зависит от проекта, потому что другие вещи вступают в игру здесь, как производительность и то, как данные на самом деле структурированы.

2

Я полагаю, вы имеете в виду Object Relational Mappers. Они обеспечивают множество функциональных возможностей, в том числе простую установку объекта CRUD.

Отъезд:

Есть много других, но что вас происходит.

0

Думаю, вам стоит прочитать о Linq to SQL. Это позволит вам работать «в первую очередь» с классами, которые представляют собой ваши таблицы базы данных и их отношения.

DataContext context = new DataContext(); 
var obj = context.Table1.Single(row => row.Id == 1234); 
obj.Name = "Test1234"; 
context.SubmitChanges(); 

This может быть хорошим местом для начала, чтобы узнать о Linq к SQL Надеюсь, что это то, что вы ищете.

0

Я согласен с (и предпочитаю) предыдущие предложения по использованию ОРМ. Просто чтобы убедиться, что у вас есть полное меню опций, здесь есть еще один вариант. Если вам нравится представление XML, (де) сериализация и т. Д., Вы также можете изучить SQLXML. С учетом этого вы не должны использовать это, чтобы избежать правильного проектирования базы данных, хотя это может быть вполне разумным для некоторых решений.

Смежные вопросы