2009-01-21 65 views
1

我想在我正在建设的应用程序中使用SubSonic(2.2),因为我喜欢它的简单性,它处理我可以预见的任何类型的查询需要。同时,我想让应用程序的上层与亚音速类型分离。我只想返回普通旧C#对象,并通过POCO进行保存。SubSonic数据层返回POCOs而不是SubSonic的ActiveRecord对象

但这里有一个问题:我希望我的POCO具有基于FK关系的Child集合和父对象的Lazy加载属性。我想我需要以某种方式将一个Subsonic SqlQuery对象放在我的POCO上的一个私有成员中,并在getter的内部使用它来获得一个延迟加载的属性。

有关如何使用SubSonic专门实现此任何想法?任何人之前做过?

我的确意识到SubSonic的下一个主要版本会做这个开箱即用的功能,但看起来至少需要几个月的时间。

回答

0

无法想出一个很好的方法来做到这一点。亚音速3看起来非常好,并会解决问题,但同时我们只是went with NHibernate

1

您可以使用属性:

tableBaseClass = “RepositoryRecord”

我怕我不知道该如何处理,虽然延迟加载。你可以看到Rob Conery's post了解更多详情。

+0

我实际上已经尝试过这个选项,但RepositoryRecord是一个SubSonic的东西,因此我仍然会连接到Subsonic。 我也尝试指定我自己的基类作为'tableBaseClass',但这并没有工作,因为我从生成的文件得到了很多构建错误。 – NathanD 2009-02-03 17:14:48

0

你想要的不是版本2.x.您可能可以通过编辑模板获得大部分途径(我有一些惰性加载属性的示例on my blog)。另一种选择是建立你的pocos,然后建立类来从SubSonic生成的类和查询映射到你的模型。

2

我在SubSonic中使用RepositoryRecord,它大多是“poco”。然后我为那些在选择属性时加载其他类的类进行部分分析。

Partial Public Class Book 

Private _Author as Database.Author 
Property Author() as Database.Author 
    Get 
    If _Author is nothing then 
     ' Load the author class here. 
    End if 
    return _Author 
    End get 
    Set 
    .... 
    End Set 
End Property 
End Class