C#和MySQL - Gentle Framework替代品

时间:2008-11-15 20:12:19

标签: c# orm

我正在C#和MySQL的个人项目开始时玩。

我熟悉Gentle Framework的使用(使用MyGeneration根据数据模型生成类)。这就是我喜欢的温柔;

  • 简单易用[class] .Retrieve(id)/ [object] .Persist()语义,强类型字段;
  • 我从数据库数据模型开始,选择何时生成新的代码文件;
  • MyGeneration允许一些代代相传的“手动代码段”......
  • ...和部分类允许我在并行文件中添加永久代码,例如简单的只读属性(比如FirstName的'FullName'和Person对象的Surname成员) - 或者我可以使用继承;
  • 我发现创建DAL是一种可以容忍且快速的方法,并为其添加了某些类似于Business-Object-Layer的工具。

不幸的是,为了有效地进行查询,我最终使用了查询/ SqlCommands,并且依赖于对列名等的弱类型引用,并且似乎冒着回避对象代理并因此缓存优势的风险。无论如何,Gentle不再被开发,似乎是考虑替代品的好时机。

那么,我应该考虑什么?

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

您的意见将不胜感激!提前谢谢你......

5 个答案:

答案 0 :(得分:2)

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

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

不要投资LINQ-to-SQL,因为谣言将会停止。

答案 1 :(得分:2)

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

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

我正在开发一个项目,我们使用实体框架与MySQL几乎没有问题。 这个选项的主要缺点是MySQL提供的官方.Net连接器还不支持实体框架 - 有一种称为MyDirect.Net的付费替代方案

答案 2 :(得分:0)

感谢Filip和Snorkpete提供的建议 - 您的评论和链接证明是有帮助的。

我可能会先尝试SubSonic;它看起来像我会理解的东西,能够迅速开始(今天应该回答),我很惊讶地发现它是由MS间接支持的,因为他们聘请了写作的人。 T4看起来也很有趣。

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

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

NIJ

答案 3 :(得分:0)

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

我们已经将它与MySQL和SQL Server一起使用 - 没有头疼的问题。为表,存储过程,列名生成类。所以每当我们发现自己做Somthing Dot Intellisense Move Arrow键和分号时。

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

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

为了给你一些一瞥 - For Books表[BookID-PK,title,AuthorID],它会生成几种类型的方法。

  • 插入方法,其中包含Title,AuthorID
  • 可以为空的列是可选的 参数a.k.a C#Nullable type?
  • 采用BookID,AuthorID,Title
  • 的更新方法
  • 按主键加载书籍(显示详细页面时很有用)
  • BookCollection和Book Entities,只需调用BookCollection.Load即可获得准备绑定到任何数据绑定控件的书籍列表

这是快速链接。

谢谢, 毛利克莫迪

答案 4 :(得分:0)

我使用一些SQL来从表中生成强类型对象,它基于Cade Bryant构建的一个,但我做了一些调整。它生成的代码不是100%可编辑的,但它可以节省大量的锅炉板工作,并且容易填补空隙(如果我是你,我会使所有属性完全成熟的属性,或承受jon双向飞碟的愤怒!)< / p>

http://NotifyURL.com/sql