原文地址:http://www.cnblogs.com/snowdream/archive/2009/08/04/analyse-why-entity-classes-less-than-data-tables.html
在通过数据库生成ADO.NET Entity Data Model(实体数据模型)时可能会出现生成的实体类个数少于数据表个数的情况。以下介绍两种可能会碰到这种情况的原因。
1. 数据表的所有列都可为空。
当数据表有主键时,实体数据模型中会把主键作为实体键来标识一个实体,如果数据表不含主键,则所有不可空的列都是实体键,它们共同来标识一个实体。当数据表的所有列都可空的时候,无法标识一个实体,所以实体数据模型中就不包含这个实体类了的。只需要给该表加一个主键或不可空的列就会出现在实体数据模型中。另外,在使用ADO.NET Entity Framework时不含主键的表比较容易出现一些奇怪的错误,尽量为每个表设置一个主键。
2. 数据表的所有列都是外键
当数据表中所有的列都是外键时,实体数据模型会智能地将这些关系中的主键表直接通过导航属性相连。
下面举一个例子。Account表和AccountPermission表存在外键关系,Account表的ID是主键,AccountPermission表的AccountID是外键。Permission表和AccountPermission表存在外键关系,Permission表的PermissionID是主键,AccountPermission表的PermissionID是外键。数据库关系图如下
这是AccountPermission表不会出现在实体数据模型中,Account表和Permission表直接通过导航属性。
这样是正常的,在使用上也不会有不便,只是初学者可能会觉得丢失了一个数据表。实际上只要将PermissionID看成是Account的一个属性,就可以理解这样的变换了。此时如果要修改AccountPermission表中PermissionID的值,不可以简单地Account.Permission.Permission=(修改后的值),而是应该先select出一个PermissionID=(修改后的值)的Permission实体,然后将这个实体作为Account的Permission实体。