在通过数据库生成ADO.NET Entity Data Model(实体数据模型)时可能会出现生成的实体类个数少于数据表个数的情况。以下介绍两种可能会碰到这种情况的原因。
1. 数据表的所有列都可为空。
当数据表有主键时,实体数据模型中会把主键作为实体键来标识一个实体,如果数据表不含主键,则所有不可空的列都是实体键,它们共同来标识一个实体。当数据表的所有列都可空的时候,无法标识一个实体,所以实体数据模型中就不包含这个实体类了的。只需要给该表加一个主键或不可空的列就会出现在实体数据模型中。另外,在使用ADO.NET Entity Framework时不含主键的表比较容易出现一些奇怪的错误,尽量为每个表设置一个主键。
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
分类:
.NET Framework
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述