最近我一直在研究可用的基于 .NET 的 ORM。我注意到每个最终都选址在一两个营地。在一个阵营中,首先创建数据库,而 ORM 提供了一种在应用程序中访问数据库的更简单方法。在第二个阵营中,对象模型首先存在,而 ORM 有助于将对象模型保存在数据库中。
现在我不是在问或断言一个阵营是否比另一个更好。我当然可以看到每种设计方法的原因。令我沮丧的是,在我最近阅读的所有教程和“入门”文档中,没有一个只是在一开始就说“这个工具假设您从现有的数据库/对象模型开始”。对我来说,这对于您是否会使用一个 ORM 还是另一个非常重要。
因此,在阅读大量内容并创建了几个“Hello World”项目之后,我整理了一系列关于我研究过的 ORM 支持的工作流的要点。任何对这些工具有经验的人都可以告诉我我是否做了任何不正确的陈述,或者完全错过了任何真正重要的点。具体来说,我真的很想知道我对每个工具是否应该首先使用数据库模式或对象模型的假设是否正确。
- 数据库应该首先存在
- 仅适用于 SQL Server
- DataContext 类用于类和数据库之间的读/写
- DataContext 可以重新调整真实的物理类,或者可以使用动态类型根据数据库模式自动创建类型。
- 映射默认为将表名映射到类名,将属性名映射到列名
- 可以通过嵌入在每个类中的属性来自定义映射
- 应先创建数据库
- 适用于多种数据库技术
- 类是使用 T4 模板从现有数据库模式自动生成的
- 生成类后,与数据库的连接是完全透明的
- 调用类构造函数自动在数据库中创建记录
- 更改属性值会自动更新数据库。
- 类结构应该是第一位的
- 适用于多种数据库技术
- 创建存储库类并连接到数据库
- 将类添加到存储库时会自动创建和更新数据库模式
repo.Add<MyClass>(instance);
- 存储库使用反射来创建/更新数据库模式
- 为每次创建一个表,为每个属性创建一个列
- 可以先创建数据库或类结构
- 可以创建映射以将新的类结构与现有数据库匹配
- 映射可用于自动生成数据库模式
- 适用于多种数据库技术
- 最终程序集中的类具有 NHibernate 映射设置的属性,该设置将类和属性映射到表和列
- 添加映射配置有两种方法
- 嵌入在二进制文件中的 XML 文件,
<classname>.hbm.xml
- 添加到代码中的属性
- 嵌入在二进制文件中的 XML 文件,
- 支持高级映射配置,包括一对一、一对可能、多对一、多对多、继承等..l 等...