EF Core 8数据库优先Scaffolding:如何仅生成实体类?
不用每次生成后手动删除冗余内容,有几个更高效的处理方式:
用脚手架参数直接禁用导航属性
执行Scaffold-DbContext命令时加上--no-navigation-properties参数,生成的实体类只会包含表字段对应的属性,不会自动生成任何外键关联的集合或引用导航。示例命令:Scaffold-DbContext "Server=.;Database=YourDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -NoNavigationProperties之后你可以像Code First那样,手动在实体类和DbContext里添加自己需要的导航属性与关系配置,完全掌控关联逻辑。
自定义脚手架模板
EF Core的实体生成基于T4模板,你可以复制默认模板(在对应EF Core NuGet包的tools目录中,如EntityType.cs.t4),修改模板里的导航属性生成代码,添加过滤规则——比如只保留你需要的关联集合,或者排除特定表的外键关联。修改完成后,用--template参数指定自定义模板生成实体,每次生成的内容都会符合你的要求。批量清理生成后的代码
如果偶尔需要保留部分导航,不想完全禁用,可以用正则表达式批量删除冗余集合属性。比如在IDE中用查找替换功能,匹配类似public virtual ICollection<XXX> XXX { get; set; } = new List<XXX>();的行,批量替换为空,比手动删除效率高很多。混合开发模式
先用-NoNavigationProperties生成基础实体类和DbContext的DbSet,再按照你熟悉的Code First流程,手动添加必要的导航属性、配置Fluent API关系,最后处理DTO映射。这种方式既利用了Database First快速生成实体结构的优势,又保留了Code First对实体关系的控制权,很适合习惯Code First的开发者。
内容的提问来源于stack exchange,提问作者Jason

