2.6 一个实体关联多个表
问题 |
有两个表,共享一个主键,把这个两个表映谢到一个实体上。 |
解决方案 |
我们用图2-17中的两个表来做例子。
图2-17 共享公共主键的两个表 建一个模型来映射这两个表,创建方法如下: 1、 用项目上右击菜单的Add –> New Item。从Visual C#的数据模板中选择ADO.NET Entity Data Model。 2、 选择Generate from database,单击下一步。 3、 使用向导,选择一个存在数据库链接,或者创建一个新链接。 4、 从Choose Your Database Object对话框中,选择表Product和ProductWebInfo。 此时建立的模型如图2-18所示。
图2-18 实现表Product和ProductWebInfo表的模式 现在我们已经把表导成了模型,下面要作的是把两个实体合并成一个实体。 1、 复制ProductWebInfo的度量属性ImageURL,粘贴到实体Product中,不能复制SKU。 2、 右击ProductWebInfo实体,选择删除,下面对话框询问,是否删除存储模型,选择No。 图2-19 询问对话框—询问你是否删除存储模型 3、 单击Product实体,查看映射明细窗体。如果映射明细窗体不显示,则点击主菜单上的View à Other Windows àEntity Data Model Mapping Details,使其显示。 4、 在实体Product的映射明细窗体中,增加一个表,且选择一个表或者视图ProductWebInfo。这时,就把表ProductWebInfo增加到实体Product中。 5、 在映射明细窗体中,映射ImageURL列到属性ImageUrl上。也要确保SKU属性也映射到表ProductWebInfo表的SKU列上。映射的结果如图2-20所示。 图2-20 在Product实体上,映射了表ProductWebInfo。注意主键做了两次映射 模型的结果(图2-18)只剩下一个实体类型(Product),原来的实体ProductWebInfo的ImagURL移到了实体Product上。 |
用法 |
在传统的系统中,为一行增加另外一个表中的额外的信息是再普通不过的事情了。随着数据演变的时间推移,没有人愿意破坏原有的代码,增加新列到重要的表中。但要解决嫁接有新列表的新表问题。 合并两个或者多个表到一个实体中,或者叫“一个实体关联多个表”,我们可以把所有部分看成一个逻辑实体。这个过程经常被叫做“垂直分解”。 垂直分解的劣势是,在获取实体的实例时,需要Join每个表,合并到实体。这种Join象列表2-6中所示。 表2-6 垂直分解的Join SELECT [Extent1].[SKU] AS [SKU], [Extent2].[Description] AS [Description], [Extent2].[Price] AS [Price], [Extent1].[ImageURL] AS [ImageURL] FROM [dbo].[ProductWebInfo] AS [Extent1] INNER JOIN [dbo].[Product] AS [Extent2] ON [Extent1].[SKU] = [Extent2].[SKU] 插入和获取没有什么特别的要求,列表2-7举例说明了这种情况的应用。
列表2-7 用Product实体类型插入和获取数据
列表2-7 输出结果是:
2.5 节 http://www.cnblogs.com/xuefly/ |