如何高效,轻松地从OOP应用程序将对象数据存储到数据库中?

时间:2010-07-21 07:38:18

标签: c# database oop

我使用带有数据库后端的C#设计了一个面向对象的应用程序,有一段时间我使用过程方式构建相同的应用程序,我觉得使用简单的SQL语句将数据存储到数据库更容易一些。 我的应用程序我想将objects属性存储到数据库,例如对于项目对象

    Class Item {
 private string itemId;

private string itemname;

private Invoice inv;  //assume Invoice object

//method

public bool storetodb() {

//..something like this
}
}

问题是我在将对象数据存储和检索到数据库时感觉有点复杂。当我搜索某些资源时,他们也使用like collection类来映射应用程序和关系数据库之间的对象。即使我搜索了SO,但我找不到任何相关信息。我得到的一个来源是

那么设计这些类型的应用程序有什么好的做法? 你能否提供任何链接,文章,推荐书或回应来解决这些类型的问题。

谢谢

更新

似乎ORM工具主要是nhibernate最有希望从你的建议。 非常感谢你的帮助,我会考虑ORM

7 个答案:

答案 0 :(得分:2)

您应该投入一些时间来调查一两个ORM。如果您正在使用.NET 4.0,那么您应该尝试使用Entity Framework的新实现。另一个广泛使用的ORM是NHibernate,它是Java着名的Hibernate ORM的.NET版本。但是,根据我自己的情况,确保将整个ORM封装到数据访问层(DAL)中,这样如果ORM遇到问题,您就可以使用本机ADO.NET。

另一个选项是EAV CR个数据库。然而,这并不是学习如何生活的最简单方法。 (我做了五年多。)

答案 1 :(得分:1)

“谷歌”? : - )

[n] hibernate似乎很受欢迎。 LINQtoSQL和EF(实体框架)也是ORM并且是“在Microsoft堆栈中” - 例如标配VS.还有许多其他ORM,例如Subsonic。

通常,由于传统SQL RDBM系统与“OO”的“阻抗不匹配”,上述大多数系统都使用遵循特定于每个模型的某些约定的模式 best 。 (有些人比其他人更“接受”不同的架构视图。)

答案 2 :(得分:1)

我会推荐Microsoft的LINQ to SQL用于Windows开发。真的很容易学习和开始。

LINQ to SQL: .NET Language-Integrated Query for Relational Data

ADO.NET Entity Data Model Tools(在Visual Studio中轻松设计)

我建议使用Hibernate for Java开发。

Relational Persistence for Java and .NET

在维基百科上阅读这篇文章:

Object-relational mapping

答案 3 :(得分:0)

购买:Scott Ambler_s“构建对象应用程序”。旧的,但是真的。

阅读ORM(Object Rlelational Mappers)。

阅读NHibernate和Microsoft实体框架 - 后者明显逊色。

答案 4 :(得分:0)

object oriented vs relational database impedance mismatch的最佳做法是使用ORM。

这并不完美,但对大多数用途都有帮助。作为@SquareCog评论,您仍然需要记住,底层有一个关系数据库,因为大多数ORM最终都会将这种情况暴露给某个程度(参见leaky abstraction)。

ORM工具可以帮助解决不匹配问题。 .NET世界中流行的是:

  • nHibernate(其中最古老的,功能齐全)
  • Linq to Sql(MS弃用)
  • 实体框架(MS新增)

答案 5 :(得分:0)

我的2c - db4o - 简单而自然......

答案 6 :(得分:0)

正如Daniel所指出的那样:db4o是一个很自然的选择,因为你没有涉及任何ORM,你只需定义你的域模型并保存这些对象做数据库!但是,如果您受限于关系数据库,那么我将使用版本4中的实体框架。

从中我可以推荐存储库模式来隐藏数据库相关的东西。