环境:EntityFramework 版本号:4.1.0.0

问题一:“数据读取器与指定的“。。。.。。。”不兼容。某个类型为“。。。”的成员在同名的数据读取器中没有对应的列。”。

使用方式:rep.context.Database.SqlQuery<T>(sql, pList.ToArray<object>()); //sql       是直接字符串拼接的

问题原因:T 是个视图,因为数据库中的字段是有前缀"C_",而生产实体的时候 我们做了去前缀的操作。导致 字段对应不上。

解决方案:在拼写sql 字符串的时候 把有前缀的字段 起个别名去掉前缀。如: C_DISP_TYPE_NM as DISP_TYPE_NM。

问题二:“V_CLAIM_DISPATCH 的“MAIN_STAT”属性不能设置为“Int64”值。必须将该属性设置为类型为“Int32”的非 null 值”

使用方式:var surveyList = claimBiz.FindAll<V_CLAIM_DISPATCH>(sqlText, pList);

问题原因:【不明】猜想可能原因是,数据库是number(10),生成的实体是int。而实际读出来的数据要对应int64。但那个字段类型的映射是EF自动完成的,不能人为修改。所以报错。

解决方案:重新写个类V_CLAIM_DISPATCH_COPY  标志字段 Nullable<Int64> MAIN_STAT。上面的使用方式 var surveyList = claimBiz.FindAll<V_CLAIM_DISPATCH_COPY  >(sqlText, pList);  把泛型改成自定义类。

问题三:多对多 新增数据时 对应关系表也会增加一条数据。

例如:科目表 有语文 数学,我新增一条学员信息 对应科目语文。更新成功后科目表 也会重新新增一条”语文“的信息。

问题原因:在添加 学员信息时  查询的科目 语句用到了 AsNoTracking (即 不被实体被EF context追踪,查询出来的实体不能直接用于更新和删除,否则报错)。参考资料 1 2 3

解决方案:在查询科目 的时候  把 AsNoTracking  这个方法去掉。[然后有出现了 问题四 ]

问题四:一个实体对象不能由多个 IEntityChangeTracker 实例引用

问题原因:在添加Add 实体时 在实体的 导航属性添加了 关系实体。 查询资料:1

如: var modelMyBlogs = new Model.MyBlogs(){};

modelMyBlogs.BlogTags.Add(itemBlogTag);

blog.Add(modelMyBlogs);

itemBlogTag 是由重新实例DbContext查询出来的。

解决方案:直接吧DbContext放到session里面或者进程内公用。(我是直接放session里)

问题五:查询异常的慢。

可能原因:

1.数据量大 筛选条件没有 EntityFunctions.AsNonUnicode   http://www.cnblogs.com/zhaopei/p/4431461.html

2.如果查询出来的结果集不用更新和修改 可以 在后面加 AsNoTracking 方法(不被实体EF context追踪)

EF遇到的一些问题的更多相关文章

  1. %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91

    "%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...

  2. 你必须知道的EF知识和经验

    注意:以下内容如果没有特别申明,默认使用的EF6.0版本,code first模式. 推荐MiniProfiler插件 工欲善其事,必先利其器. 我们使用EF和在很大程度提高了开发速度,不过随之带来的 ...

  3. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  4. 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)

    前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...

  5. EntityFramework之DetectChanges's Secrets(三)(我为EF正名)

    前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...

  6. ASP.NET从零开始学习EF的增删改查

           ASP.NET从零开始学习EF的增删改查           最近辞职了,但是离真正的离职还有一段时间,趁着这段空档期,总想着写些东西,想来想去,也不是很明确到底想写个啥,但是闲着也是够 ...

  7. 使用EF CodeFirst 创建数据库

    EntityFramework 在VS2015添加新建项时,选择数据->ADO.NET 实体数据模型,有一下选项 来自数据库的EF设计器,这个就是我们最常用的EntityFramework设计模 ...

  8. EF上下文对象线程内唯一性与优化

    在一次请求中,即一个线程内,若是用到EF数据上下文对象,就创建一个,这也加是很多人的代码中习惯在使用上下文对象时,习惯将对象建立在using中,也是为了尽早释放上下文对象, 但是如果有一个业务逻辑调用 ...

  9. EF里Guid类型数据的自增长、时间戳和复杂类型的用法

    通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文章的开头提示下:提供的demo为了后面演示效果,前面代码有些 ...

  10. 模仿EF,我们用JS开发的HTML5 SQLite 访问库

    今天终于有空把demo放到了RunJS上面去.请使用google chrome观看在线演示: http://sandbox.runjs.cn/show/pekbd9zb 这个库本来是我们开发的phon ...

随机推荐

  1. C/C++面试知识点总结

    1.中缀,后缀,前缀表达式: 后缀表达式是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方法.这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式 ...

  2. git 创建分支 并 提交到远程分支

    git branch(分支命令的使用http://hbiao68.iteye.com/blog/2055493 0.可以通过git branch -r 命令查看远端库的分支情况 1,从已有的分支创建新 ...

  3. ExtJS基础知识总结:自定义日历和ComboBox控件(二)

    概述 1.ExtJS 5不支持日期选择框中只选择年月,为了满足ExtJs5可以实现选择年月的功能,查询网上资料,整理出来了相应的处理方式,最终实现的效果如下图: 2.ExtJS 控件丰富,如果需要实现 ...

  4. 安装opensuse时遇到的一些问题

    1.硬盘安装suse的时候提示找不到源,因为是2块硬盘所以需要mount一下硬盘. 2.安装N卡驱动的时候,推荐一键安装,不然需要把所有GCC和make安装好,并且禁用系统的nouneau.

  5. Web.xml配置参数详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...

  6. VS2012 还原默认设置

    恢复默认设置的2种方法 如果VS出现问题或设置变乱,可以通过恢复默认设置使之回到安装成功时的状态,从而解决出现的问题.VS恢复默认设置的方法有2种,分别是:通过"导入和导出设置"实 ...

  7. centos 研究

    默认工具: yum , (Ubuntu: apt-get)

  8. 使用代理下载Unity AssetStore上资源的方法

    Unity的AssetStore下载package的时候经常抽风,而且开了代理工具的全局代理依然无效. 检索网络后得知,这是因为它下载的时候不检测IE代理设置,而是取环境变量中HTTPS_proxy和 ...

  9. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  10. Spark 资源池简介

    在一个application内部,不同线程提交的Job默认按照FIFO顺序来执行,假设线程1先提交了一个job1,线程2后提交了一个job2,那么默认情况下,job2必须等待job1执行完毕后才能执行 ...