我使用带有数据库后端的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
答案 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
在维基百科上阅读这篇文章:
答案 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世界中流行的是:
答案 5 :(得分:0)
我的2c - db4o - 简单而自然......
答案 6 :(得分:0)
正如Daniel所指出的那样:db4o是一个很自然的选择,因为你没有涉及任何ORM,你只需定义你的域模型并保存这些对象做数据库!但是,如果您受限于关系数据库,那么我将使用版本4中的实体框架。
从中我可以推荐存储库模式来隐藏数据库相关的东西。