使用Effort内存数据库共享连接触发Index was not found异常如何解决
异常触发原因
- Effort通过
CreatePersistent创建的持久内存连接,元数据(表结构、索引、外键关联配置)会在第一次被DbContext访问时一次性初始化写入,后续无法自动合并其他上下文的模型结构。 - 你代码中
ReferenceDbContext先使用连接完成了元数据初始化,第二个结构不同的PersonDbContext复用同一个连接时,Effort会尝试将PersonDbContext的实体关联关系合并到已有的内存库结构中,当存在跨上下文外键关联或实体约束不匹配的情况时,Effort的反射逻辑找不到对应依赖的索引,就会抛出Index was not found异常。
解决办法
- 方案1:若需要跨上下文共享内存库数据,将两个上下文的实体定义合并到同一个DbContext中,避免多上下文复用连接。
- 方案2:若必须拆分多上下文,在初始化第二个上下文前关闭EF的数据库初始化策略,避免触发元数据合并逻辑,示例代码如下:
// 禁用PersonDbContext的自动初始化逻辑 Database.SetInitializer<PersonDbContext>(null); personDbContext = new PersonDbContext(connection);
- 方案3:若不需要跨上下文共享数据,为每个DbContext单独创建Effort连接即可。
内容的提问来源于stack exchange,提问作者Drill
相关产品推荐
相关产品推荐

