gpt4 book ai didi

.net - ORM比较: Which comes first the database or classes?

转载 作者:行者123 更新时间:2023-12-04 04:27:34 25 4
gpt4 key购买 nike

最近,我一直在研究可用的基于.NET的ORM。我注意到,每个人最终都只能在一两个营地中选址。在一个阵营中,首先创建数据库,而ORM提供了一种更轻松的方法来访问应用程序中的数据库。在第二个阵营中,对象模型首先存在,而ORM有助于将对象模型持久保存在数据库中。

现在我不是在问或断言一个阵营是否比另一个阵营更好。我当然可以看到每种设计方法的原因。让我感到沮丧的是,在我最近阅读的所有教程和“入门”文档中,都没有出来,只是一开始就说“此工具假定您从现有的数据库/对象模型开始”。对我而言,这对于您是使用一个ORM还是使用另一个ORM是非常基础的。

因此,在进行了大量阅读并创建了几个“Hello World”项目之后,我在我研究过的ORM支持的工作流中放了一系列要点。任何有使用这些工具经验的人都可以告诉我,我是否做出了任何不正确的陈述,或者完全遗漏了任何真正重要的观点。具体来说,我真的很想知道我对每种工具应首先使用的数据库模式还是对象模型的假设是否正确。

Linq To SQL

  • 数据库应该首先存在
  • 仅与SQL Server一起使用
  • DataContext类用于在类和数据库之间读取/写入
  • DataContext可以重新调整实际的物理类,或者可以使用动态类型基于数据库模式自动创建类型。
  • 映射默认为将表名映射为类名,将属性名映射为列名
  • 映射可以通过每个类中嵌入的属性
  • 进行自定义

    Subsonic (Active Record)
  • 首先应创建数据库
  • 可与多种数据库技术一起使用
  • 使用T4模板
  • 从现有数据库架构中自动生成类
  • 一旦生成类,与数据库的连接是完全透明的
  • 调用类的构造函数自动在数据库
  • 中创建记录
  • 更改属性值会自动更新数据库。

  • Subsonic (Simple Repository)
  • 应该首先使用类结构
  • 可与多种数据库技术一起使用
  • 创建存储库类并将其连接到数据库
  • 将类添加到资源库后,数据库模式会自动创建和更新
  • repo.Add<MyClass>(instance);
  • 存储库使用反射来创建/更新数据库模式
  • 每次创建一个表,并为每个属性
  • 创建一列

    NHibernate
  • 可以首先创建数据库或类结构

    可以创建
  • 映射以将新的类结构与现有数据库匹配
  • 映射可用于自动generate the database schema
  • 可与多种数据库技术一起使用
  • 最终程序集中的
  • 类具有NHibernate映射设置,这些设置将类和属性映射到表和列
  • 有两种添加映射配置的方法
  • 嵌入在二进制文件<classname>.hbm.xml
  • 中的XML文件
  • 属性已添加到代码

  • 支持高级映射配置,包括一对一,一对多,多对一,多对多,继承等。l等...
  • 最佳答案

    继续提出 Entity Framework 的意见:

    Entity Framework (wikipedia also has some nicely structured information)

  • 支持代码优先,模型优先和数据库优先开发。代码优先与模型优先之间的区别在于,首先在代码中首先编写实体类,而在模型首先中,则首先设计数据模型,然后根据该模型生成实体。
  • 基于元数据模型(EDMX)的
  • (尽管可以认为它首先不在代码中),它也定义了映射; EDMX是一个XML模型,其中包含数据库结构,实体结构以及它们之间的映射,并且由Visual Studio中内置的设计器支持。在代码优先中,映射是在代码中定义的,而不是在EDMX中定义的。
  • 支持多种数据库技术(我使用过MySql和Oracle)。
  • 基于T4代码生成(在v4中)的
  • ,除了允许有趣的可扩展性方案之外,还可以生成:

    从特定于 Entity Framework (EntityObject)的基类的
  • 实体
  • 完全不依赖 Entity Framework 的POCO实体
  • 自跟踪实体。
  • 与RIA服务(Silverlight)配合良好。
  • 支持我认为的几乎所有关系类型,并支持多种策略的继承(尽管其中某些策略可能存在一些问题)。
  • 对Linq(Linq to Entities)很好的支持。

  • 还有LLBLGen,我没有使用过,但是从我的一位同事的评论来看,它并没有那么出色。

    我曾经使用过NHibernate,尽管短暂,但印象很好。即使那时还不如现在成熟,它仍然是一个很好的库。不确定现在是否要在NH和EF之间进行选择...我想我会选择EF,因为那是我过去一年左右一直使用的东西,并且开发会更快(仅对我来说),但是功能-NH可能会稍微好一些。

    关于.net - ORM比较: Which comes first the database or classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721315/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com