C#Silverlight - 定义数据库表之间的连接?

时间:2009-09-23 09:41:40

标签: c# database silverlight join

目前我有一个c#silverlight业务应用程序。该应用程序托管在Asp.net中,使用ADO.Net实体框架和域服务类来读取/写入我的sql server数据库。

数据库的结构如下。我有三张桌子。工作,审计和图片。一个Job可以有很多Audits,One Image可以有很多Audits - 一个相当简单的结构。在我的Silverlight客户端中,我有一个绑定到Jobs表的datagrid,我还有一个列表框,我填充了与datagrid中所选作业直接相关的审计项列表。为了做到这一点,我使用datagrids选择更改事件来确保每次作业选择在数据网格中更改时,每个作业的审核列表框都填充了特定的审核集。执行此操作的代码如下:

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {  

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

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

非常感谢帮助

1 个答案:

答案 0 :(得分:0)

我认为这是对您的问题的一个很好的描述: http://microapplications.com/blog/archive/2009/04/18/329.aspx

基本上,您可以创建一个包含job,image和audit属性的新类,并从DomainService返回它。在服务器端,你拼凑了一些LINQ代码,它们将从所有3个表中选择相关项。

这只是一个解决方案,你可能还可以在你的selectionchanged处理程序中编写一些代码来加载与相关作业相关的图像。