将对象保存到数据库?

时间:2010-05-13 18:56:12

标签: c# .net sql-server database object-persistence

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

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

6 个答案:

答案 0 :(得分:2)

Object Relational Mapping

有很多产品,最臭名昭着的产品是NHibernate,微软在Linq 2 SqlEntity Framework提供了几种竞争产品(你应该使用后来,但每个人都使用第一个,因为waaaay更简单)。

你可以在http://ormbattle.net/看到一个很好的(虽然我怀疑有偏见)ORM产品的比较

答案 1 :(得分:2)

我相信你指的是Object Relational Mappers。它们提供了丰富的功能,包括简单的对象CRUD管道。

退房:

还有很多其他的,但那会让你前进。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

根据项目,NHibernate之类的ORM可能正是您所寻找的。将数据库信息映射到类的东西,ORM负责处理插入,删除和选择,而无需手写SQL。这也允许迁移到不同的数据库系统而无需大量重写。

我说这取决于项目,因为其他事情在这里发挥作用,如性能以及数据的实际结构。

答案 4 :(得分:0)

我认为你应该阅读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的好地方 希望这是你正在寻找的。

答案 5 :(得分:0)

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