2009-09-23 78 views
1

目前我有一个C#silverlight商业应用程序。该应用程序在Asp.net中使用ADO.Net实体框架和一个域服务类来读/写我的sql服务器数据库。C#Silverlight - 定义数据库表之间的连接?

数据库的结构如下。我有三张桌子。工作,审计&图片。一个工作可以有很多审计,一个图像可以有很多审计 - 一个相当简单的结构。在我的Silverlight客户端中,我有一个绑定到作业表的数据网格,我也有一个列表框,在其中填充与数据网格中所选作业直接相关的审核项目列表。为了做到这一点,我使用datagrids选择已更改的事件,以确保每次在数据网格中更改作业选择时,都会为每个作业的审核列表框填充该特定的审核集。这样做的代码如下:

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

       var auditJob = dataGrid1.SelectedItem as Job; 
       auditsList.ItemsSource = auditJob.Audit; 
} 

正如你可以看到它不是火箭科学,当然这种方法可行,因为一个工作与审计之间的许多关系。 (一份工作,许多审计)。我想做一些类似的事情,但与图像表(不同的关系结构)。这一次,我想用我的Image表的内容填充一个列表框,这样当用户在数据网格中选择一个特定的作业时,它会显示该作业的审核和图像列表。但是,由于工作和形象之间没有直接联系,我不确定如何做到这一点,但希望采用类似于上面所用方法的方法。由于一个作业具有多个审核,而一个图像具有多个审核,因此审核表包含其自己的AuditID主键,以及JobID外键和ImageID外键。我的问题是,如何设置Job和Image之间的链接以便为每个单独作业生成图像列表?

帮助将不胜感激

回答

0

我觉得这是你的问题的一个很好的说明: http://microapplications.com/blog/archive/2009/04/18/329.aspx

本质上讲,你可以创建一个包含工作,形象和审计属性的新类并返回它你的DomainService。在服务器端,您可以拼凑一些LINQ代码,从所有3个表中选择相关项目。

尽管这只是一个解决方案,但您也可以在selectionchanged处理程序中编写一些代码,以便加载与所涉及作业相关的图像。

+0

很好的答案,但是我现在不能锻炼如何去查询数据,因为我的类没有GetEnumerator(),因此我不能使用foreach循环:-(任何想法? – Goober 2009-09-24 09:16:18