具有自动生成功能的 .NET ORM 解决方案:Subsonic、Castle AR,...?

2023-11-27

我曾经使用自定义数据映射库,目前我正在尝试切换到更广泛的 ORM 解决方案。

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

  • 能够从数据库模式生成可用的类(SQL Server 支持就足够了),
  • 支持ActiveRecord模式,
  • 以编程方式配置(通过代码或属性,无 HBM 文件),
  • free.

您能推荐一款吗?


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

亚音速3.0

我目前最喜欢的一个,因为它感觉在功能性和简单性之间取得了很好的平衡。

我不喜欢什么:

  • 对一对多关系的两端使用 IQueryable 和复数名称 - 这对我来说似乎相当违反直觉;
  • 为所有类生成一个文件 - 就像每个类一千行一样,我对代码文件这么大有一种不好的感觉;
  • T4 processing is invoked automatically, so a database with up-to-date schema must be available all the time.

城堡活动记录

带有 ActiveWriter 插件的 CastleAR 几乎是我所需要的,但是 ActiveWriter 的代码并不完美(似乎不支持 Nullable 属性,并且默认的一对多实现不起作用)并且我找不到如何手动修复此代码。

Darkside GeneratorStudio 生成更好的代码 - 正确的定义,每个实体一个文件 - 尽管它使用像这样的神秘名称引用类 ID 引用类。就我个人而言,我更喜欢 Studio 插件而不是独立应用程序,但这肯定是一个小问题。

CastleAR 发行版中捆绑了大约 20 个文件;虽然本身不​​是问题,但感觉像是超重了。我不需要太多关于 NHibernate 和其他东西的深奥知识吗?

流畅的NHibernate

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

我是不是错过了什么重要的事情?


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

FluentNHibernate 的目标是不再需要维护映射文件、代码生成等。它支持 Fluently 定义的 NHibernate HBM 文件的 C# 等效项,这非常好,并且比 XML 更易于维护,但它更强大的方面是它的自动映射功能。如果您的数据库是按照严格定义的约定设计的,则可以配置 FNH,它将生成所有域对象到数据库结构的正确映射。

如果您对设计数据库并让它决定您的域模型更感兴趣(这会让我感觉很肮脏),这里有一个问题专门针对NHibernate 生成器

回复您的评论:NHibernate 本身不会改变数据库本身,但是包含一个名为 SchemaExport 的实用程序类,它提供了一个名为 Create 的工厂方法。您可以使用它来生成 SQL 语句,以 NHibernate 查看关系结构的方式创建数据库。并且可以选择直接针对数据库运行或写入控制台。

该实用程序对于将域向前生成到数据库非常有用,这就是我目前为所有新应用程序开发编写数据库的方式。我仍在努力找出维护数据库版本的最佳方法。最坏的情况只是 SC sql 输出,并且需要对更改架构的每一行进行注释,以使其具有特定的更新/删除语句来实现结果。这将使按版本向前/向后滚动变得容易,或者只需执行整个脚本即可从头开始创建数据库。

如果您纯粹进行反向映射,则应该有工具可用于生成数据库需要映射到等效类的相应 HBM(即,如果您最初在域模型中编写了这些类,它将导出当前的匹配模式)数据库)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有自动生成功能的 .NET ORM 解决方案:Subsonic、Castle AR,...? 的相关文章

随机推荐

  • 在换行符处拆分单个单元格

    我有一个电子表格 其中的数据位于用换行符分隔的单个单元格中 我需要将单元格分成单独的行 以便我可以删除一些数据并重新组合 像这样 Item Status 285T1150 3 285T0680 1 1 Complete 285T1145 7
  • 如何在 Django 中测试 celery period_task?

    我有一个简单的周期性任务 from celery decorators import periodic task from celery task schedules import crontab from models import Su
  • 如何保存包含指针的ctypes对象

    我使用第 3 方库 它在大量计算后返回包含指针的 ctypes 对象 如何保存 ctypes 对象以及指针指向的内容以供以后使用 我试过 scipy io savemat gt 类型错误 无法将对象转换为数组 cPickle gt 包含指针
  • 使用 php 将事件添加到谷歌日历

    我正在开发一个客户端网络应用程序 用户可以在其中预订带有日期 时间 位置等的驱动器 客户要求将每次预订都添加为他的 Google 日历上的活动 我创建了一个 API 密钥并下载了 PHP API 客户端 https github com g
  • javascript中两个模块声明有什么区别?

    JavaScript 中模块的两次声明有什么不同 一个函数周围有括号 而另一个则没有 一篇文章说 注意匿名函数周围的 这是由 语言 因为以标记函数开头的语句是 始终被视为函数声明 包括 创建一个 函数表达式代替 检查时两者似乎都做了同样的事
  • 将函数保存在本地存储中

    我正在处理一些对象 其中包含要从浏览器显示和操作的大量数据 并且我想将其保存在本地存储中 为了保存对象 我使用了 JSON stringify 所以一切都变成文本 而且效果很好 bindingRef primo name primo mod
  • WP8 项目:“CompileXaml”任务意外失败

    我在计算机上重新安装了 Windows 在 Visual Studio 2012 for Windows Phone 中打开任何 Windows Phone 8 项目后 收到以下错误消息 The CompileXaml task faile
  • ?: 运算符在 C 中究竟如何工作?

    我有一个问题 编译器如何运行以下代码 include
  • 仅使用 Django 的 DB 部分

    有人知道 Django 有多 模块化 吗 我可以只使用 ORM 部分来获取映射到数据库表的类并知道如何从这些表中读取 写入吗 如果没有 您会推荐什么作为 Hibernate 的 Python 等价物 如果您喜欢 Django 的 ORM 独
  • 如何在Android中的EditText上设置自定义字体?

    我正在尝试在EditText 与我目前正在做的事情相比 有人有更好的方法吗 Typeface myFont Typeface createFromAsset getAssets fonts myfont ttf edittext setTy
  • FSharp 构建在 MSBuild 中失败,但在 Visual Studio 中工作正常

    我的解决方案中有许多项目 其中还有一个 F 项目 在 Visual Studio 中一切都构建得很好 但是当我尝试在 TeamCity 服务器 未安装 VS 上使用 MSBuild 构建它时 它会抛出以下构建错误 C TeamCity bu
  • __callStatic()、call_user_func_array()、引用和 PHP 5.3.1

    我一直在阅读有关 SO 和其他地方的内容 但我似乎找不到任何结论性的东西 是否有任何方法可以有效地通过此调用堆栈携带引用 从而实现如下示例中所述的所需功能 虽然这个例子并没有试图解决它 但它确实说明了问题 class TestClass s
  • 使用滚动中位数过滤 Pandas 数据框中的异常值

    我正在尝试从带有日期的 GPS 高程位移散点图中过滤掉一些异常值 我尝试使用 df rolling 计算每个窗口的中值和标准差 然后如果它大于 3 个标准差则删除该点 但是 我无法找到一种方法来循环该列并比较滚动计算的中值 这是我到目前为止
  • 如何用sed插入包含斜杠的字符串? [复制]

    这个问题在这里已经有答案了 我有一个 Visual Studio 项目 是本地开发的 代码文件必须部署到远程服务器 唯一的问题是它们包含的 URL 这些 URL 是硬编码的 该项目包含 URL 例如 page one 为了使链接在服务器上有
  • H2 DB - 列必须位于分组依据列表中

    我正在使用 H2 DB 访问静态数据库 我有一张桌子 看起来像 COUNTRY STATE CITY LAT LNG COUNTRYID STATEID CITYID Germany Berlin 1 23 1 23 1 1 0 Germa
  • Laravel 以良好的方式从控制器定义默认布局

    我用谷歌搜索了两个小时 但没有找到答案 也许你能帮忙 当我定义在我的控制器 class MyController extends Base Controller public layout layouts default public fu
  • Spark-submit/spark-shell>yarn-client和yarn-cluster模式的区别

    我正在使用 YARN 运行 Spark 从链接 http spark apache org docs latest running on yarn html 我找到了不同纱线模式的解释 即 masterSpark 可以运行的选项 有两种部署
  • 我可以在运行时修改Java方法的字节码吗?

    我正在编写另一个大型java程序的插件 我想在运行时修改java程序的某些java方法的一些字节码 以便能够拦截方法调用 即向方法中注入一些hook代码 有什么办法可以达到这个目的吗 PS 我检查了以下方法 1 更改java程序的类加载器
  • Pandas 从列中可用的列表数据中扩展行

    我在 pandas 中有一个像这样的数据框 column1 column2 a b c 1 d e f 2 g h i 3 预期输出 column1 column2 a 1 b 1 c 1 d 2 e 2 f 2 g 3 h 3 i 3 如
  • 具有自动生成功能的 .NET ORM 解决方案:Subsonic、Castle AR,...?

    我曾经使用自定义数据映射库 目前我正在尝试切换到更广泛的 ORM 解决方案 经过一些实验 我将我的要求细化为以下几点 能够从数据库模式生成可用的类 SQL Server 支持就足够了 支持ActiveRecord模式 以编程方式配置 通过代