2009-10-01 61 views
3

我有一堆我创建的POCO,我想创建一个持久层。事情是,我真的不在乎数据如何存储在SQL Server中,我只是希望它被存储。换句话说,我想告诉ORM工具,“这里有一些POCO类,保存它们。”除此之外不需要做任何事情。有没有任何可以做到这一点的C#的ORM工具?我一直在努力争取Fluent NHibernate的工作,而Subsonic不支持关系,这使得像“为单个帖子获取所有评论”这样的东西相当困难。它需要能够自动生成一个数据库模式,而不必设置一堆属性和什么。是否有一个可以将数据库“黑盒子”的C#的ORM工具?

+0

如果数据库中存在外键关系,Subsonic确实支持关系。它应该像迭代'Post.Comments'一样简单... – 2009-10-01 21:37:35

+0

是的,如果您使用ActiveRecord并自下而上。但是,我正在使用SimpleRepository自上而下,到目前为止它还不支持关系。 – 2009-10-01 21:51:53

+0

当报告组想要在六个月后对自动生成的模式进行查询时,问题就会出现。我个人设计我的课程,设计我的表格和关系(可能需要DBA的帮助),然后映射它们。 – TrueWill 2009-10-02 01:36:44

回答

2

我个人使用流利NHibernate和它为我做你所需要的。好吧,差不多。有事情需要手动指定ManyToMany,但你无法避免它。如果你想要良好的实体设计,你必须让一些成员为私人,这将禁用这些成员的自动映射。不过,我改变了我的设计很多,甚至从来没有想过我的数据库如何改变(一个新项目的奢侈,但...)。

你看过Castle ActiveRecord吗?你真的需要真正的POCO吗,或者你可以忍受属性和实体保存?那么,我会避免,但它可能适用于你。

+0

我用Fluent NHibernate使用automapping遇到的两个问题是:1.当我尝试使用Dictionary列时出现了问题,2.它没有映射枚举,我有很多。第一个问题是可以理解的(我应该将类中的键/值对包装起来),但是我找不到第二个解决方案。 – 2009-10-01 21:55:29

+0

我使用枚举没有问题。我有问题,但谷歌帮助简单的解决方案。这里有很多关于这个的问题,并且很容易解决。现在还不能确切地说,但我刚刚添加了IPropertyConvention,据我所知,它告诉使用GenericEnumMapper进行枚举,请参阅http://stackoverflow.com/questions/439003/how-do-you-map-an-enum -as-an-int-value-with-fluent-nhibernate,尽管你可能想使用CustomTypeIs(typeof(int))。无论如何,这不是FNH的最大问题;-) – queen3 2009-10-01 22:09:30

+0

原来,流利NHibernate的1.0 RTM可以自动映射枚举就好(尽管字符串),但不能做枚举的集合。看看现在是否可行。 – 2009-10-02 03:45:30

1

结账Subsonics SimpleRepository。创建一个类,创建一个数据库,给Subsonic一个连接字符串,并处理其余的。俏皮。

+0

SimpleRepository不支持关系生成。如果你有一些不需要关系的单个对象(比如单个博客文章),那很好,但是在你需要关系的情况下(比如属于某个特定文章的评论),你做了什么? – 2009-10-01 21:58:14

0

看一看的DevExpress的eXpress Persistent Objects

+0

我看了一下,但是因为你必须从XPObject继承,它会把POCO对象变成持久感知对象。 – 2009-10-01 23:26:04

6

你可以试试DataObjects.Net,但它不是你在寻找什么。首先它的实体不是poco,你必须从某种基类继承它们。其次,你应该标记你想用特殊属性保存的字段。

那么为什么我推荐DataObjects呢?因为我认为它完全是黑箱数据库。您只需制作一堆对象并要求ORM保存它们。

  • 它在运行时在指定的RDBMS中自动生成数据库模式。
  • 您不必调用像.Save()这样的方法来保存更改,就像使用常用对象一样工作。
  • 您不必编写SQL查询 - 它完全支持LINQ。
  • 即使当现有数据库升级到下一个版本时,也不必处理SQL脚本。
相关问题