使用Entity Framework (v6.1.3)突然遇到这个问题了,之前一直好好的,怎么破?

此处省略了多次在“好”与“坏"的项目中试验的过程(苦啊),直接给出答案。答案是:没有按DbContext的机制来进行DbSet的实例化导致的。(我遇到的情况)

我们一般在自己的DbContext里这样写

public DbSet<MyEntity1> MyEntity1Set { get; set; }

这样就没问题,不用为MyEntity1Set实例化,就能直接使用,基类帮做了实例化工作。

问题出在,如果我们在自己的DbContext的构造方法或其它地方自己做实例化,后面的代码(比如运行到ToList()的时候)就很可能出现标题的异常。

DbContext并不是只能创建DbSet<>类型的属性,而是提供了一个virtual的Set<>方法  DbSet<TEntity> Set<TEntity> 。允许我们override来修改这个实例化的过程,即是说,所有DbSet实例化,都应该在此方法中进行。前面说的”基类帮做了实例化工作“也是调用Set<>方法。

但是,也有人在在这个方法中通过反射把当前DbContext对象的对应的属性值作为Set<>方法的返回值,这个是非常违背DbContext.Set<>的机制,非常不可取的。

原因搞清楚,解决起来就简单了。如果只是用原本的DbSet就不用override这个Set<>方法,也不用自己实例化了。如果要使用自己的类型(就像我用MockDbSet)代替DbSet,只需要这样写:

public override DbSet<TEntity> Set<TEntity>()
{
return new MockDbSet<TEntity>();
}

当然了,MockDbSet是DbSet的子类。

这样,这个异常就消失了,起码在我这里是这样。如果你遇到了这个异常,原因不一样,或者你照上面做了,还是解决不了,欢迎留言探讨。

解决问题:The context cannot be used while the model is being created的更多相关文章

  1. EF DbContext 并发执行时可能出现的问题

    现在许多Web项目都使用了IOC的DI注入组件.其中对象的生命周期管理是非常重要的. 有时我们为了提高请求的响应,经常在请求线程中执行多个子线程,然而忽略了EF的DbContext的生命周期管理. D ...

  2. Code First开发系列之管理数据库创建,填充种子数据以及LINQ操作详解

    返回<8天掌握EF的Code First开发>总目录 本篇目录 管理数据库创建 管理数据库连接 管理数据库初始化 填充种子数据 LINQ to Entities详解 什么是LINQ to ...

  3. 使用Entity Framework出错

          在使用的过程中,写了一个例子,结果就报错说      The context cannot be used while the model is being created.      在 ...

  4. EF--model is being created异常

    使用EF的时候出现了下面的异常,我使用了TASK和saveChangeAsync()异步 The context cannot be used while the model is being cre ...

  5. [转载]Difference between <context:annotation-config> vs <context:component-scan>

    在国外看到详细的说明一篇,非常浅显透彻.转给国内的筒子们:-) 原文标题: Spring中的<context:annotation-config>与<context:componen ...

  6. [转载]Context and Interception : The .NET Context

    转载自:Context and Interception : The .NET Context Every new app domain starts with a single context, c ...

  7. <context:annotation-config> 和 <context:component-scan>的差别

    <context:annotation-config> is used to activate annotations in beans already registered in the ...

  8. Android面试收集录18 Android Context详解

    Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言 ...

  9. Context都没弄明白,还怎么做Android开发?

    Activity mActivity =new Activity() 作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言 ...

随机推荐

  1. WebView JS与RN进行通讯

    RN0.37终于官方增加了WebView与React Native的通讯,之前一真使用的是第三方控件React-Native-WebView-Bridge,但不是知道怎么回事这个第三方控件喊了很长时间 ...

  2. 无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS"

    无法解决 equal to 操作中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AS" 之间 2011-0 ...

  3. 异构(兼容dubbo)SOA系统架构(.net)优化升级

    前面一片文章已经提到我司的异构(兼容dubbo)SOA系统架构,解决了不少技术痛点,也还算比较完善,也顺利推广开来. 但作为项目的开发者,自己产品的问题心里是清楚的,离自己满意还是有不小的距离. 在推 ...

  4. IDCM项目学习笔记

    项目介绍: IDCM:Internet Data center monitoring 网络数据中心监控平台 IRP:Information Resource planing 信息资源规划 1.设置表中 ...

  5. python基础之面向对象高级编程

    面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个"函数"供使用(可以讲多函数中公用的变量封装到对象中) ...

  6. 【PHP资源】PHP 资源大全

    看到这篇文章不错,转来收藏 依赖管理 依赖和包管理库 Composer/Packagist:一个包和依赖管理器 Composer Installers:一个多框架Composer库安装器 Pickle ...

  7. Lind.DDD.ConfigConstants统一管理系统配置

    回到目录 Lind.DDD.ConfigConstants属于新添加的组件,用来帮助我们安全的进行配置消息的管理,我们在开发项目时,有个感觉,你的config配置项会越来越多,越来越难以阅读,随着你引 ...

  8. #9.1课堂总结#JS基础(二)

    在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活.强大,不像是Java等强类型高级语言数组只 ...

  9. javascript中的this和e.target的深入研究

    this 是javascript的一个关键字,当函数运行时在内部自动生成.this是会变化的,在不同的场合,代表的东西就不一样.简单点来说,this指调用这个函数的对象.当你使用this代表的当前ht ...

  10. 屌丝giser成长记-研一篇(上)

    2011年本科毕业之后,我选择了保研GIS研究生,继续了我的GIS研究生涯,读研的童鞋们注意了,读研选择什么样的导师很重要,因为不同的导师有不同的人脉,从浅一点的来说,导师手头的开发项目多的话,你自己 ...