Entity Framework 6.2.0数据库优先模式未生成部分实体类求助
嘿,我来帮你捋一捋这个问题——你在MSSQL里明明有HistoryFabric、HistoryFurniture、ProductFabric这几个实体,但生成ADO.NET Entity Data Model后它们却不见了,而且这些缺失的实体结构还一致,从你提供的字段信息来看,它们应该是类似操作日志的表,包含Id(主键int类型)、关联对象ID、OperationType(int类型)、OperationTime(datetime类型)、Operator(字符串类型)这些字段对吧?
结合EF的常见坑,给你几个排查方向:
先确认数据库表的主键设置
EF生成实体的前提是表必须有明确的主键,哪怕字段名叫Id,也要确保在数据库里已经把它标记为主键(比如在SSMS的表设计界面,Id字段旁边会有钥匙图标)。如果表没有主键,EF会直接跳过生成实体。检查模型生成时的选择项
回忆下生成/更新模型的步骤:在“选择数据库对象”的窗口里,你有没有确实勾选了这几个表?有时候展开Tables节点的时候容易漏选,尤其是表比较多的情况下。建议你重新走一遍生成模型的流程,仔细确认这几个表的勾选状态。排查数据类型和字段约束问题
虽然你的字段看起来都是常规类型,但还是要检查:- 有没有字段用了EF不兼容的特殊类型?比如SQL Server的
timestamp(注意不是datetime)这类,不过从你描述的字段来看应该不存在这种情况 - 有没有允许主键为null?EF绝对不允许主键字段是可空的,这会直接导致实体无法生成
- 有没有字段用了EF不兼容的特殊类型?比如SQL Server的
验证数据库账号权限
你用来连接数据库生成模型的账号,有没有这几个表的读取权限?如果账号没有SELECT权限,EF在扫描数据库对象的时候会看不到这些表,自然生成不了实体。可以在SSMS里用同一个账号试试查询这些表的内容,确认权限没问题。手动补全实体作为备选方案
如果以上方法都没解决,你可以试试手动添加:- 在EDMX设计器里右键→添加→实体,手动创建对应的实体,然后在实体的属性里设置映射到对应的数据库表和字段
- 或者直接编辑EDMX的XML文件,添加这些表的实体集和映射配置(这个需要对EDMX结构有点了解,谨慎操作)
内容的提问来源于stack exchange,提问作者TaPO4eg3D

