使用Entity Framework时ASP.NET Web应用反复重启原因咨询
Entity Framework 6 动态生成EDMX导致ASP.NET应用反复重启的可能原因
- 运行身份权限不足:ASP.NET Web应用的运行身份(如IIS应用程序池关联的身份、IIS内置IUSR账号)对bin目录的读写权限不完整,EF动态生成EDMX文件后,无法写入完整的文件属性或者文件被权限控制拦截,下次启动时EF无法检测到合法的已生成EDMX文件,就会触发重新生成逻辑。控制台应用默认以当前登录用户身份运行,对输出目录有完全控制权限,生成的EDMX文件可以正常留存复用,不会重复生成。
- 模型持久化缓存未配置:EF6默认将编译后的模型元数据缓存在进程内缓存中,ASP.NET应用重启后进程缓存自动清空。如果你没有通过自定义
DbConfiguration为EF配置持久化的模型缓存路径,EF每次冷启动都会重新编译模型并导出EDMX到bin目录。控制台应用运行期间进程缓存不会丢失,且进程退出后只要生成的EDMX文件没有被删除,下次启动会直接复用。 - 项目调试/发布配置异常:如果你的ASP.NET项目开启了「启动调试前清理bin目录」的配置,或是发布时勾选了「删除目标目录中现有文件」选项,上次运行生成的EDMX文件会在应用启动前被清理,EF每次启动都需要重新生成。此外如果你的EDMX文件的
生成操作属性没有设置为嵌入的资源,EF无法从程序集中读取预编译的模型元数据,就会退化为动态生成EDMX到bin目录。 - EDMX写入被应用重启中断:ASP.NET默认会监控bin目录的所有文件变更,一旦检测到新增/修改/删除文件就会触发应用重启。如果EF写入EDMX的过程还未完成,bin目录的变更已经触发了应用重启,会导致EDMX文件损坏/不完整,下次启动EF检测到文件非法就会重新生成,陷入循环。
- 模型动态变更导致哈希校验失败:如果你的
DbContext构造逻辑中包含动态修改模型映射的代码(比如运行时动态切换数据表schema、根据配置增减实体映射规则),EF每次启动计算的模型哈希值都会和上次生成EDMX对应的哈希不匹配,EF会判定模型已更新,触发重新生成EDMX的逻辑。
内容的提问来源于stack exchange,提问作者Richard Parkin
相关产品推荐
相关产品推荐

