代码之家  ›  专栏  ›  技术社区  ›  VladV

.NET ORM解决方案与类自动生成:亚音速,城堡AR,…

  •  7
  • VladV  · 技术社区  · 15 年前

    我曾经使用一个定制的数据映射库,现在我正试图切换到一个更广泛的ORM解决方案。

    经过一些试验,我将我的需求细化为以下几点:

    • 能够从数据库架构生成可用的类(SQL Server支持就足够了)。
    • 支持ActiveRecord图案,
    • 可编程配置(通过代码或属性,无HBM文件)
    • 免费。

    你能推荐一个吗?


    到目前为止,我已经尝试过:

    亚音速3.0

    这是我目前最喜欢的,因为它在功能性和简单性之间达到了很好的平衡。

    我不喜欢的是:

    • 在一对多关系的两端使用iQuery<gt;和复数名称-这对我来说似乎有点违反直觉;
    • 为所有类生成一个文件——就像每个类生成一千行一样,我对代码文件这么大有一种不好的感觉;
    • T4处理是自动调用的,因此具有最新模式的数据库必须始终可用。 .

    城堡活动记录

    Castler与ActiveWriter外接程序几乎是我需要的,但ActiveWriter的代码并不完美(似乎不支持空属性,并且默认的一对多实现不起作用),我找不到如何手动修复此代码。

    Darkside Generatorstudio生成更好的代码-正确的定义,每个实体一个文件-尽管它使用类似 引用类ID引用类 . 个人而言,我更喜欢StudioAddin,而不是独立应用程序,但这当然是一个小问题。

    在Castler发行版中,大约有20个文件捆绑在一起;虽然本身没有问题,但它感觉像是超重了。难道我不需要太多有关NHiberiate和其他东西的深奥知识吗?

    流利的氨气

    广泛推荐,但我找不到它的代码生成器。

    我错过重要的事情了吗?

    6 回复  |  直到 14 年前
        1
  •  1
  •   Adam Cooper    15 年前

    关于亚音速的一些你不喜欢的事情:

    • 在一对多关系的两端使用iQuery<gt;和复数名称-似乎 对我来说相当违反直觉;

    是的,我同意这是非常违反直觉的,我从来没有深入了解为什么会这样做,但是你可以很容易地修改模板来解决这个问题。

    • 为所有类生成一个文件——就像每个类生成一千行一样,我对代码文件这么大有一种不好的感觉;

    您可能认为这会导致问题,但我还没有遇到任何问题,我还没有看到关于stackoverflow的报告。

    • T4处理是自动调用的,因此具有最新模式的数据库必须始终可用。

    只有当您编辑t4文件时,它才会自动调用,所以实际上您只需要在更改模板时提供最新的模式。

        2
  •  3
  •   Community CDub    8 年前

    nhibernate不遵循活动记录模式,它遵循存储库模式。

    FluentHibernate的目标是不再需要维护映射文件、代码生成等。它支持流畅定义的与nhibernate hbm文件相当的c等价文件,这比XML非常好,而且可维护性更高,但是它的自动映射功能更强大。如果您的数据库是用强定义的约定设计的,那么可以配置fnh,它将正确生成所有域对象到数据库结构的映射。

    如果您对设计数据库更感兴趣,并且让它指定您的域模型(这会让我感到非常不愉快),这里有一个问题专门讨论 NHibernate Generators

    回答您的意见: nhibernate本身不会改变数据库本身,但是包含一个名为schemaExport的实用程序类,它提供一个名为create的工厂方法。您可以使用它来生成SQL语句,以NHibernate看到您的关系结构的方式来创建数据库。可以选择直接对数据库运行,也可以写入控制台。

    这个实用程序对于将您的域转发到数据库非常有用,目前我正在为所有新的应用程序开发编写数据库。我仍在研究维护数据库版本的最佳方法。最坏的情况是,只需sc SQL输出,并要求更改模式的每一行的注释具有特定的update/delete语句,以获得结果。这将使按版本向前/向后滚动很容易,或者只需执行整个脚本就可以从头开始创建数据库。

    如果您只进行反向映射,那么应该有一些工具可以生成您的数据库需要映射到等效类的相应HBM(即,如果您原本要在域模型中编写这些类,那么它将导出当前数据库的匹配模式)。

        3
  •  2
  •   Community CDub    8 年前
    • 能够从数据库架构生成可用类(SQL Server支持 够了)
    • 支持ActiveRecord图案,
    • 可编程配置(通过代码或属性,无HBM文件) 免费。
    1. Linq to SQL从数据库架构自动生成。一个大问题是属性名是小写的,所以您需要类似的工具 this one 重新命名。 It isn't restricted to SQL Server .

    2. It sort of supports the ActiveRecord pattern -离这儿很近。

    3. 这些类可以通过DBML文件进行配置,DBML文件只是一个XML文件。Visual Studio生成 designer.cs 允许您将其生成的实体作为 partial 类。

    除了NH和亚音速以外,还有其他几个值得一看:

    • Lightspeed -对于8个实体,链接显示一些示例代码。但是,您必须通过接口定义从表到类的映射,这样它就不符合1)
    • LLBlgen 这不是免费的
        4
  •  1
  •   Mark Redman    15 年前

    我们使用codesmith来生成代码,并强烈推荐它作为生成工具。

    如果您看看codesmith,它支持各种ORM/Business对象模板。

    我们实施了自己的CSLA(见 http://www.lhotka.net/ )几年前的模板来处理CSLA,这不仅仅是ORM。CSLA非常好,工作非常好,而且它的可扩展性很高。我们现在已经创建了自己的框架,并且放弃了核心的CSLA框架,因为我们不需要所有的特性,并且使事情变得更加轻量级。

        5
  •  0
  •   kevinw    15 年前

    我想知道旧的亚音速2.2是否更适合您的要求?它确实为每个表生成单独的类,仅在您告诉它时才重新生成,并且支持ActiveRecord模式。在文档中查看更多详细信息,网址为 http://subsonicproject.com/docs/Main_Page

        6
  •  0
  •   GloryDev    15 年前

    关于以前的文章,CSLA不是ORM(您可以手动从数据库映射到业务对象)。CSLA、NHibernate、亚音速等不支持活动记录模式。

    如果您正在考虑不支持活动记录模式的框架,那么我将考虑Habanero( http://www.habanerolabs.com/ )这是开放源码的,允许您通过XML配置或代码构建业务对象。 Habanero 它远不止是一个ORM,而且具有丰富的域(业务对象)支持,并具有用于表示域对象(业务对象)的Powerfull对象模型。