zoukankan      html  css  js  c++  java
  • EF遇到的一些问题

    环境: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追踪)

  • 相关阅读:
    由12306.cn谈谈网站性能技术 岁月无情
    雅虎网站页面性能优化的34条黄金守则 岁月无情
    [纯技术讨论]从12306谈海量事务高速处理系统 岁月无情
    解密淘宝网的开源架构(转) 岁月无情
    HttpCombiner.ashx处理 岁月无情
    转 自定义控件属性的特性大全 岁月无情
    模式窗口window.showModal 岁月无情
    动态加载JSashx的妙用 岁月无情
    ASP.NET中Get和Post的用法 岁月无情
    初学Oracle的笔记(1)——基础内容(实时更新中..)
  • 原文地址:https://www.cnblogs.com/zhaopei/p/4487048.html
Copyright © 2011-2022 走看看