在通過資料庫產生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實體。
本文適用於 .NET Framework 3.5 SP1