将对象保存到数据库?

问题描述:

到目前为止,在我的.Net编码冒险中,我只需要将信息保存到文件中。所以我使用XmlSerializer和DataContractSerializer将属性类序列化为XML文件。然而,我的下一个项目需要我从SQL服务器数据库中保存和检索信息。我想知道我的选择是做什么的。将对象保存到数据库?

该应用程序的当前版本不是由我创建的,它使用了大量硬编码的SQL命令。但现在我试图避免做任何事情,我必须从数据库或对象读取或写入单个字段。我特别想在我的代码中避免大量的硬编码SQL。我喜欢序列化程序类如何根据类的属性和/或公共属性来了解如何读取和写入XML文件。有没有类似的数据库,而不是XML?

+1

为什么不使用LINQ-To-SQL或NHibernate等ORM?两者都会避免“硬编码SQL”。 – 2010-05-13 19:01:01

+1

您是否考虑过* OBJECT DATABASE * *?像Perst,eXtreme DB,Cache? – Guru 2010-05-13 19:07:35

Object Relational Mapping

有一堆的产品在那里,最臭名昭著的一个是NHibernate,有几个微软在Linq 2 SqlEntity Framework提供竞争产品的(你应该使用以后,但每个人都使用首先是waaaay更简单)。在http://ormbattle.net/

处理数据库时没有通用对象类型。只有表和字段。 这些的组合可以使一个对象,但。如果您关心客户端代码上的硬编码SQL,最好的办法是使用存储过程。

我也主要是指数据库中的实际字段类型。 ORM的是一个不同的故事。如果你想看看nHibernate,如果你想要一个对象关系映射器,可以帮助插入,选择等。

根据项目的ORM像NHibernate可能是你在找什么。您可以将数据库信息映射到类,ORM负责插入,删除和选择,而无需手写SQL。这也允许在不需要大量重写的情况下迁移到不同的数据库系统。

我说这取决于项目,因为其他的东西在这里发挥作用,比如性能和数据的实际结构。

ORM产品的

你可以看到一个漂亮的(虽然我怀疑偏见)比较,我相信你指的是Object Relational Mappers。这些提供了丰富的功能,包括简单的对象CRUD管道。

退房:

有很多人,但是那将让你去。

我认为你应该阅读Linq to SQL。这将允许您使用表示数据库表及其关系的类来“主要”工作。

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

This可能是开始了解LINQ to SQL的 希望这是你在找什么的好去处。

我同意(并更喜欢)以前使用ORM的建议。只是为了确保你有一个完整的选项菜单是另一种选择。如果您熟悉XML表示,(序列化)等等,您还可以考虑使用SQLXML。据说,你不应该用这个来避免做适当的数据库设计,尽管对于某些解决方案这可能是完全合理的。