我自己的一生

是你的,是我的,到底是谁的?

导航

【译文】实体框架---第二章 2.6 一个实体关联多个表

Posted on 2010-07-02 12:48  Abbott zhao  阅读(1703)  评论(1编辑  收藏  举报

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对话框中,选择表ProductProductWebInfo

  此时建立的模型如图2-18所示。

 

 

2-18 实现表ProductProductWebInfo表的模式

 

现在我们已经把表导成了模型,下面要作的是把两个实体合并成一个实体。

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),原来的实体ProductWebInfoImagURL移到了实体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/