C# 和 MySQL - 温和的框架替代品

Posted

技术标签:

【中文标题】C# 和 MySQL - 温和的框架替代品【英文标题】:C# and MySQL - Gentle Framework alternatives 【发布时间】:2008-11-15 20:12:19 【问题描述】:

我在 C# 和 mysql 的个人项目开始时玩弄。

我熟悉 Gentle Framework 的使用(使用 MyGeneration 生成类,基于数据模型)。这就是我喜欢 Gentle 的地方;

简单易用的 [class].Retrieve(id) / [object].Persist() 语义与字段的强类型化; 我从DB数据模型入手,选择何时生成新的代码文件; MyGeneration 允许跨代保存一些“手动代码部分”... ...部分类允许我在并行文件中添加永久代码,例如简单的只读属性(例如 Person 对象的 FirstName 和 Surname 成员中的“FullName”)——或者我可以使用继承; 我发现这是一种创建 DAL 并向其添加某些类似业务对象层的工具的可容忍且快速的方法。

不幸的是,为了有效地查询,我最终使用了相当多的查询/SqlCommands,并且依赖于对列名等的弱类型引用,并且似乎有回避对象代理和缓存优势的风险。无论如何,Gentle 已不再开发,现在似乎是考虑替代方案的好时机。

那么,我应该考虑什么?

可以生成强类型 ADO 数据集,但似乎很难以一种在更新表结构并重新生成数据集。 NHibernate 似乎有很多粉丝......但我第一次看到它似乎表明 XML 数据定义是王道,而不是数据库中现有的数据模型。它的依赖关系看起来也很重; SubSonic 演示似乎暗示它会生成文件,并且在 WebAppProjects 的演示中,它看起来可能会以我可以添加或继承的方式生成文件; MySql Connector.Net 工具似乎不支持为 Linq 生成数据集(例如通过拖放),我怀疑这是强类型数据访问的关键需求。

您的想法将不胜感激!提前谢谢你...

【问题讨论】:

【参考方案1】:

我有一些使用 Gentle 的经验,我不得不承认它在查询方面效率很低。我建议研究 NHibernate,因为它有一个丰富的社区。确实首选 XML 定义,但有一些方法可以使用类级属性进行映射。

SubSonic(尤其是3.0 version)使用T4 templates 看起来很有前途。这应该让您更好地控制代码生成。它也可以做 LINQ。

不要投资于 LINQ-to-SQL,因为有传言称它将停止使用。

【讨论】:

【参考方案2】:

假设 .Net 3.5 Framework 是一个可供使用的选项,那么您可以看看 Microsoft 的 Entity Framework(与 .Net 3.5 Service Pack 1 一起发布)。

实体框架允许根据您的数据库架构生成 DAL 类,但这些类的维护隐藏在一个 XML 文件后面,该文件可以通过 Visual Studio 中的简单命令快速轻松地更新以解决架构更改IDE。

我正在做一个项目,我们将实体框架与 MySQL 一起使用,但问题很少。 此选项的主要缺点是 MySQL 提供的官方 .Net 连接器尚不支持实体框架 - 有一个付费替代方案,称为 MyDirect.Net

【讨论】:

【参考方案3】:

link text我会选择亚音速、成熟的 DAL 发生器,并大大提高生产力。

我们已经将它与 MySQL 和 SQL Server 一起使用 - 不用担心。为表、存储过程、列名生成类。所以每次我们发现自己在做某事 Dot Intellisense 移动箭头键和分号。

每当您的架构发生变化时,您都可以重新生成这些类,然后就可以回家了。此外,您可以通过创建部分类来扩展它们。

它支持几乎所有的 SQL 语义 - 连接、按主键加载 Collection、添加 WHERE 子句、Order by、Count、Top、调用存储过程、视图等,直观的语法是一大优势。

为了让你一睹为快——对于 Books 表[BookID-PK, title, AuthorID],它会生成几种类型的方法。

采用 Title、AuthorID 的插入方法 可空列是可选的 参数 a.k.a C# Nullable 类型? 采用 BookID、AuthorID、Title 的更新方法 按主键加载图书(在显示详细信息页面时很有用) BookCollection 和 Book 实体,只需调用 BookCollection.Load,您就有了准备绑定到任何数据绑定控件的书籍列表

这里是快速链接。

谢谢, 毛利克·莫迪

【讨论】:

问了这个问题之后的几年,我终于把这个答案标记为“接受”,因为我确实继续尝试 SubSonic。【参考方案4】:

感谢 Filip 和 Snorkpete 的建议 - 您的 cmets 和链接很有帮助。

我可能会先尝试 SubSonic;它看起来像是我会理解并能够快速开始使用的东西(今天应该回答这个问题),我很惊讶地看到它得到了 MS 的间接支持,因为他们雇用了编写它的人。 T4看起来也很有趣。

实体关系模型看起来也很有趣,MyDirect 的链接将来可能会有所帮助。这里唯一的缺点是期望。 MS 过去搞砸了他们的方法,使他们可以轻松地通过拖放创建初始设计,但以后更难修改或保持最新。

无论如何,再次感谢你们,我会尽量保持更新这个问题。

尼日

【讨论】:

不客气。我还记得看到另一个名为 LightSpeed (mindscape.co.nz/products/LightSpeed) 的实体框架。它是商业的,有有限的免费版本。有趣的是,他们的主要负责人 (andrewpeters.net) 被 Microsoft 聘为从事 Entity Framework 的工作。【参考方案5】:

我使用一些 SQL 从表中生成强类型对象,它基于 Cade Bryant 构建的对象,但我做了一些调整。它生成的代码不是 100% 可编译的,但它节省了大量的样板工作,并且很容易填补空白(如果我是你,我会让所有属性完全成熟的属性,或者承受 jon skeet 的愤怒!)

http://NotifyURL.com/sql

【讨论】:

以上是关于C# 和 MySQL - 温和的框架替代品的主要内容,如果未能解决你的问题,请参考以下文章

.net 中的 Apache 骆驼替代品?

mysql_insert_id 替代 postgresql

标准 C# DataGrid 的免费替代品?

C# 程序中数据库的良好替代品

Couchapp 是 Web 框架的现实替代品吗? [关闭]

对于 C# 应用程序的小型远程调试器,作为 Visual Studio 的替代品,我都有哪些选择?