从数据库创建不同投影以与C#一起使用的最佳实践

时间:2011-04-13 07:13:20

标签: c# database linq-to-dataset

所以,我的问题是我的数据库中有一堆相互关联的表。现在,根据用户的需求,我需要从中创建不同的投影。

假设我有10张桌子,需要6个不同的投影。这些投影直接用作我使用的视图组件的DataSource。基本上,到目前为止,我已经找到了两种方法来实现这一目标。

1)我使用包含我需要的所有不同表的设计器创建一个DataSet。然后我用Linq2DataSet创建投影并将结果交给视图组件 2)我创建一个包含6个自定义TableAdapter的DataSet,每个投影一个,然后用它们填充数据表并将表交给视图组件。

对于解决方案1,它显然更灵活,我可以更轻松地从中创建新的投影。但是,如果数据量增加,这可能会成为一个问题 对于解决方案2,它更轻但很难进行任何更改。我不希望很快就会发生很多变化,但灵活性总是很好。

那么,哪些解决方案会更好,还有其他更好的解决方案吗?

编辑:添加一些上下文

所以我想我会给出一个我正在使用的数据类型的例子。基本上,我有一个包含结果的表。结果有一个类型,它可以有一个或多个关系。这些被定义为例如truckID,routeID或countryID。

现在,根据结果的类型,我需要获取一个或多个关系。这些例子可能是卡车平均速度的结果类型,它可能与所有三个都有关系,这意味着我想加入所有上述表格。另一个例子可能是卡车交付数量的结果类型,可能与路线和国家有关系。未使用的关系始终为0或null。

此外,这些案例进一步划分为方案。这意味着我应该能够将获取要显示的数据的查询更改为仅考虑给定方案。

所以我的问题是,如何阅读所有这些数据并正确使用它。我想SQL视图可能是一个选项。我对数据库访问很新,所以任何帮助都表示赞赏。

1 个答案:

答案 0 :(得分:1)

第一个不合适,因为使用LINQ在客户端进行投影。第二个可以使用,但你仍然填充6个表。据我所知,你的帖子只有一个,因为只有一个数据视图。但我的建议是,如果您的客户端向您发送它所期望的投影类型的ID,您可以通过定义6个视图或可以是动态查询来使用数据库端的投影。对所需的列使用水平过滤,并使用where子句进行垂直过滤。

我将使用视图,因为查询被外部化到DB,因此与代码中的嵌入式quere相比更容易更改。